作为初学者,我目前正在OSX上使用崇高文本学习编程。所附代码是通过崇高文本编译的。运行时错误是,当我输入“a”或“9.3”等任何非整数数据时,while-循环不会中断。
以下是工作指导:
只使用main()函数反复测试程序:
1.请求用户输入一个整数,
2.读取整数,
3.按如下方式处理整数:返回0终止程序,1打印“1”,2打印“2”,对任何其他整数打印"I‘不知道“。
例如,以下是可能出现在终端上的序列,其中整数由用户输入:
请输入一个整数
2
二
请输入一个整数
33
我不知道
请输入一个整数
1
请输入一个整数
下面是我的密码。
谢谢你帮忙。
#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");
}
}发布于 2014-08-07 07:48:48
#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;
}发布于 2014-03-02 22:08:39
您的循环从未终止,因为您从未告诉它终止。它继续执行,只要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;
}
}发布于 2014-03-02 04:53:22
与其使用if else,我建议使用switch语句
如果只需要使用if else,则包括另一个提到的else语句。
else
exit(0); 让你的程序在这种情况下终止。
https://stackoverflow.com/questions/22123975
复制相似问题