1

举个例子:

printf("Continue?\n>>");
scanf("%d", &cont);
getchar();

通常我添加 getchar() 以防止程序无限循环(从缓冲区中读取 '\n' 字符)。但是,当与此语句后面的菜单一起使用时,会读入额外的字符,并且会跳过字符输入之后的任何 scanfs(最多输入字符数)。

我想弄清楚的是,当它读入非 int 类型的输入时,如何防止它跳过我的程序的几个部分。最好将其放在一个循环中,直到变量处于预期域中才会继续?

4

3 回答 3

1

考虑使用fgetsandsscanf代替。加载一行的输入,然后只解析该行而不是整个标准输入。

于 2011-03-11T20:12:34.393 回答
0

无需读取整数,只需读取字符串并将其转换为数字 (atoi)。可能出现的两个问题:

  1. 字符缓冲区不够大。为了防止这种情况,您可以从输入中逐个字符地读取字符,并在必要时重新分配缓冲区。
  2. 字符串不是数字。Atoi 将返回一些默认值(0 或 -1,不记得了)。你只需要以某种方式检查字符串。
于 2011-03-11T20:20:16.473 回答
0

检查返回的值scanf。返回值指示分配给的数字变量。如果您期望一个int并且用户键入一个字符,scanf则应返回零。

尝试包括一个"%*s"输入说明符。见http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

于 2011-03-11T20:19:32.487 回答