作为初学者,我在OSX上学习Sublime Text的编程。 附加的代码通过Sublime Text编译。 运行时错误是,当我输入任何非整数数据(如'a'或'9.3')时,while循环不会中断。
以下是工作说明:
测试一个只有main()函数重复的程序:
1。请求用户输入一个整数,2。读取整数,3。处理整数如下:返回以终止程序为0,打印“1”为1,打印“2”为2,打印“我不知道”为任何其他整数。
例如以下是可能出现在终端的可能序列,其中用户输入整数:
请输入一个整数
2
两个
请输入一个整数
33
我不知道
请输入一个整数
1一个请输入一个整数
0 |
#include <stdio.h>
int main(){
int n;
int a = 1;
while (a!=0){
printf("Please enter an integer\n");
scanf("%d", &n);
if (n == 1) printf("one\n");
else if (n==2) printf("two\n");
else if (n==0) return 0;
else if (n<0 || n >2) printf("I don't know that\n");
}
}
答案 0 :(得分:1)
你的循环永远不会终止,因为你永远不会告诉它终止。只要a != 0
,它就会继续执行。您将a
初始化为1并且永远不会更改它,因此您自然会有无限循环。
您也没有检查scanf
是否成功。如果输入一些垃圾值,它将使n
保留其先前的值,并返回一个结果,表明它无法读取新值,但您的程序无法区分成功和失败。
scanf
会返回一个int
结果,表明它能够读取多少项(或EOF
,如果出现错误,则为负值)。您至少应该将值与1
进行比较,看看它是否成功。
您打算使用a
来确定循环是否应该继续执行。你应该给它一个更有意义的名字,比如keep_going
。您可以将它设为bool
(如果您有#include <stdbool.h>
,如果您的编译器支持它),但使用int
0
表示false和1
对于true也没关系。
int keep_going = 1;
while (keep_going) {
/* ... */
if (...) {
keep_going = 0;
}
}
或者您可以编写无限循环并使用break
来终止它:
while (1) {
/* ... */
if (...) {
break;
}
}
答案 1 :(得分:0)
我建议使用if
语句
else
switch
。
如果您只需要使用if
else
,请提及另一个else
声明。
else
exit(0);
让你的程序在这种情况下终止。
答案 2 :(得分:0)
#include <stdio.h>
int main(int argc, char **argv)
{
int looper = 1;
while(looper){
printf("Please enter an integer:\n");
int i;
scanf("%d", &i);
if(i==0){
looper = 0;
}
else if(i==1){
printf("one\n");
}
else if(i==2){
printf("two\n");
}
else{
printf("I don't know that\n");
}
}
return 0;
}