[英]Basic C programming_while_runtime error
作为一个初学者,我目前正在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");
}
}
您的循环永远不会终止,因为您永远不会告诉它终止。 只要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;
}
}
而不是使用的if
else
,我建议使用一个switch
语句
如果仅if
else
需要使用,则添加另一个else
语句提及。
else
exit(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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.