【发布时间】:2016-12-01 22:10:26
【问题描述】:
我一直在尝试使用 scanf() 来读取字符串和整数。它工作正常,但我无法检查输入是否正确。
char command[6];
int cmd_num;
scanf("%5s %d", command, &cmd_num);
它可以很好地读取正确的输入,我可以通过 strcmp 检查字符串是否正确。我试图通过函数 isdigit() 检查数字,但它无法正确检查,我猜是因为空格,但我不确定它是如何工作的。
我试图用谷歌搜索这个,我玩过 [^\n] 但它仍然不起作用。谁能告诉我 scanf 究竟是如何工作的?
我认为解决方案是如果我能准确地告诉 scanf 读取什么 -> 字符串(空格)整数。是否可以通过正则表达式或其他方式获取?
我需要的基本上是scanf读取识别字符串的行,然后检查它后面是否也有数字。
另一个问题是,只要用户给出输入,我就需要读取输入,我尝试使用 getchar 进行 while 循环,只要 char 不是 '\n' 就重复,但这会关闭循环刚开始,但如果我给它 EOF 条件,即使有多个换行符,它也永远不会结束。我想它也可能受到 scanf 的限制,但我不确定究竟是怎么回事,这个论坛上的帖子无法给我答案。
这不会发生:
while ( ( c = getchar() ) != '\n')
{
//code
}
无论换行如何,这都会继续:
while ( (c = getchar() ) != EOF )
{
//code
}
【问题讨论】:
-
“我尝试通过函数 isdigit() 检查数字,但无法正确检查”:正如 iharob 正确所说,isdigit() 用于单个字符。你到底想检查什么?是否有一个数字? scanf() 会告诉你:如果第二个“单词”不是数字,scanf 会返回 1。
-
要考虑的一点是,输入定义的越严格,处理它就越容易。号码可以是可选的吗?然后让它成为强制性的。开始时容易得多。
标签: c