【发布时间】:2021-06-17 18:54:49
【问题描述】:
我必须完成一个大学项目,我的部分代码行为异常。
该部分的目标是获取用户输入的整数并将其存储在一个变量中,以便我以后可以使用它,但是如果用户输入一个字符,我必须再次询问该数字。
我使用scanf 函数获取用户输入并将其放入while 循环中,以在输入无效时不断请求输入。
问题在于,当用户输入字符时,代码会崩溃并开始运行while 循环,而不会在scanf 中停止以获取用户输入。
循环条件始终为真是有道理的,但奇怪的是它不会停止读取新输入。
我解构了我的代码,以便复制问题以使其更易于调试。
我知道有一些无用的变量,但在我的原始代码中它们很有用,我只是将它们保留在那里以使其看起来与原始代码相似。
我只能使用scanf 来获取用户输入,尽管我知道他们,但在这个项目中我只被允许使用 scanf。我不能使用scanf的格式来获取字符,这个项目只允许使用数字类型。
C11 是我们在类中使用的标准版本。
如果这个问题的解决方案很愚蠢,我很抱歉,我不擅长 C,而且这个学期我遇到了一些困难......
提前致谢。
while (!verification) {
printf(">>>"); //write values in here
check = scanf("\n%d", &var); //input a number and store the number of valid inputs
if (check) verification = 1; //if the input is a number then the while condition should turn to false with this statement
printf("var = %d, check = %d, verification = %d\n", var, check, verification); //printing all variables
}
【问题讨论】:
-
我建议将
scanf("\n%d", &var)更改为scanf("%d", &var)。格式说明符%d将自动删除任何前导空格。 -
“如果用户输入了一个字符,我必须再次询问该数字。” 该字符保留在输入缓冲区中,直到您采取措施将其删除。如果某个字符在某些上下文中无法处理,那么
scanf不会将其丢弃。请考虑使用fgets(),后跟sscanf()或strtol()。否则有duplicate questions 围绕如何清除输入 - 这是一个非常常见的问题。 -
你"只能使用
scanf来获取用户输入,尽管知道他们,在这个项目中我只允许使用scanf。我不能使用scanf' s 格式来获取字符,此项目中只允许使用数字类型。” 我不明白如何可能 删除阻止输入的不需要的非数字字符, 当scanf("%d", ...)是唯一允许的输入方式时。
标签: c while-loop scanf