我很确定之前有人问过,但我找不到任何答案,所以我走了。这是一行简单的代码,我无法退出while loop
。如果我将||
更改为&&
,则无论我按什么,都会退出。谢谢你的答案。
#include <stdio.h>
int main()
{
int answer;
printf("Are you sure you want to exit the program? Type in 1 for yes and 2 for no.\n");
scanf("%d", answer);
//This is to check that the user inputs the right number if not error message is displayed
while(answer <1 || answer > 2)
{
printf("Please type in 1 to exit the program and yes and 0 to keep playing. \n");
scanf("%d", answer);
flushall();
}
return 0;
}
答案 0 :(得分:0)
如果你想退出1,那么你只需要检查输入是否等于它,这就是为什么我想在不等于1时扫描更多的答案。如果是,那么它将省略循环并直接返回0.
我也改变了scanf的使用方式 - 当你声明一个变量时(在你的情况下回答),系统在内存中给它一个地址。然后使用scanf从用户那里获取输入,并在获取输入后,将其写入该变量的地址,以便稍后引用时,系统将转到该地址并检索该值。
int main()
{
int answer;
printf("Are you sure you want to exit the program? Type in 1 for yes and 2 for no.\n");
scanf("%d", &answer);
//This is to check that the user inputs the right number if not error message is displayed
while(answer != 1)
{
printf("Please type in 1 to exit the program and yes and 0 to keep playing. \n");
scanf("%d", &answer);
}
return 0;
}
答案 1 :(得分:0)
这是误解/忘记scanf
如何运作的常见情况。
int scanf ( const char * format, ... );
从stdin.
它从stdin
读取数据,并根据参数格式将数据存储到位置pointed
中。附加参数。
附加参数should point
已经分配了格式字符串中相应格式说明符指定类型的对象。
这意味着参数应为pointers
。
在你的情况下:
int answer;
scanf("%d", answer);
answer
不是指针,而是int
类型的变量(对象)。
要满足scanf
,您必须使用指向answer
的指针。
您可以使用unary
或monadic
operator
&amp; 来提供变量的地址。
scanf("%d", &answer);
或者您可以使用指向answer
的指针:
int answer;
int answer_ptr = & answer;
scanf("%d", answer_ptr);
这也是正确的,但通常没有必要采用这种结构。
其次是:
while(answer <1 || answer > 2)
您可能希望将其修改为
while (answer != 1 && answer != 2)
如果您有兴趣在while loop
等于answer
或1
时打破2
。