【问题标题】:scanf for string and number in Cscanf 用于 C 中的字符串和数字
【发布时间】: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


【解决方案1】:

您不检查数字是否为数字,isdigit() 用于检查 ascii 值是否为介于 09 之间的数字。

要检查scanf() 是否成功并且输入是否正确,因此cmd_num 的值是否正确并且是从输入中读取的整数,您必须检查scanf() 的返回值。

它返回匹配的格式说明符的数量。你有两个所以

if (scanf("%5s%d", command, &cmd_num) == 2) // this means it's correct
//                          ^ your code is missing the address of operator

【讨论】:

  • @L.Kratky 这不是很具体。这将有助于了解您所做的输入和未预料到的输入。
猜你喜欢
  • 1970-01-01
  • 2020-09-14
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多