举个例子:
printf("Continue?\n>>");
scanf("%d", &cont);
getchar();
通常我添加 getchar() 以防止程序无限循环(从缓冲区中读取 '\n' 字符)。但是,当与此语句后面的菜单一起使用时,会读入额外的字符,并且会跳过字符输入之后的任何 scanfs(最多输入字符数)。
我想弄清楚的是,当它读入非 int 类型的输入时,如何防止它跳过我的程序的几个部分。最好将其放在一个循环中,直到变量处于预期域中才会继续?
举个例子:
printf("Continue?\n>>");
scanf("%d", &cont);
getchar();
通常我添加 getchar() 以防止程序无限循环(从缓冲区中读取 '\n' 字符)。但是,当与此语句后面的菜单一起使用时,会读入额外的字符,并且会跳过字符输入之后的任何 scanfs(最多输入字符数)。
我想弄清楚的是,当它读入非 int 类型的输入时,如何防止它跳过我的程序的几个部分。最好将其放在一个循环中,直到变量处于预期域中才会继续?
考虑使用fgets
andsscanf
代替。加载一行的输入,然后只解析该行而不是整个标准输入。
无需读取整数,只需读取字符串并将其转换为数字 (atoi)。可能出现的两个问题:
检查返回的值scanf
。返回值指示分配给的数字变量。如果您期望一个int
并且用户键入一个字符,scanf
则应返回零。
尝试包括一个"%*s"
输入说明符。见http://www.cplusplus.com/reference/clibrary/cstdio/scanf/