基本C编程\u while\u运行时错误

基本C编程\u while\u运行时错误,c,C,作为一名初学者,我目前在OSX上学习使用Sublime文本编程。 所附的代码是通过升华文本编译的。 运行时错误是,当我输入任何非整数数据(如“a”或“9.3”)时,while循环不会中断 以下是工作说明:仅使用main()函数测试一个程序,该函数重复执行:1。请求用户输入一个整数,2。读取一个整数,3。按如下方式处理整数:返回以终止0的程序,打印1的“1”,打印2的“2”,打印任何其他整数的“我不知道”例如,在用户输入整数的终端上可能出现以下序列:请输入一个整数22请输入一个整数33我不知道请输

作为一名初学者,我目前在OSX上学习使用Sublime文本编程。 所附的代码是通过升华文本编译的。 运行时错误是,当我输入任何非整数数据(如“a”或“9.3”)时,while循环不会中断

以下是工作说明:
仅使用main()函数测试一个程序,该函数重复执行:
1。请求用户输入一个整数,
2。读取一个整数,
3。按如下方式处理整数:返回以终止0的程序,打印1的“1”,打印2的“2”,打印任何其他整数的“我不知道”

例如,在用户输入整数的终端上可能出现以下序列:
请输入一个整数
2
2
请输入一个整数
33
我不知道
请输入一个整数
1
一个请输入一个整数
0

下面是我的代码。 谢谢你的帮助。
#包括
int main(){
int n;
INTA=1;
while(a!=0){
printf(“请输入一个整数\n”);
scanf(“%d”和“&n”);
如果(n==1)printf(“一\n”);
如果(n==2)printf(“两个\n”);
如果(n==0),则返回0;
否则,如果(n2)printf(“我不知道”\n);
}
}

我建议使用
开关
语句,而不是使用
if
else

如果您只需要使用
If
else
,请包含另一个
else
语句

else
    exit(0); 

您的程序在这种情况下终止。

您的循环从未终止,因为您从未告诉它终止。只要
a!=0
。您将
a
初始化为1,并且从不更改它,因此自然会有一个无限循环

您也没有检查
scanf
是否成功。如果您输入了一些垃圾值,它将保留以前的值
n
,并返回一个结果,表明无法读取新值,但您的程序无法区分成功与失败

scanf
返回一个
int
结果,指示它能够读取多少项(或者
EOF
,如果有错误,则为负值)。您至少应该将该值与
1
进行比较,以查看它是否成功

似乎您打算使用
a
来确定循环是否应继续执行。你应该给它起个更有意义的名字,比如
继续
。您可以将其设置为
bool
(如果您有
#include
,如果您的编译器支持它),但是使用
int
0
表示false,使用
1
表示true也可以

int keep_going = 1;
while (keep_going) {
    /* ... */
    if (...) {
        keep_going = 0;
    }
}
或者,您可以编写一个无限循环,并使用
break
终止它:

while (1) {
    /* ... */
    if (...) {
        break;
    }
}
#包括
int main(int argc,字符**argv)
{
int-looper=1;
while(活套){
printf(“请输入一个整数:\n”);
int i;
scanf(“%d”、&i);
如果(i==0){
活套=0;
}
else如果(i==1){
printf(“一个\n”);
}
else如果(i==2){
printf(“两个”);
}
否则{
printf(“我不知道”\n);
}
}
返回0;
}

您是否可以添加
否则中断?Hello World确实有效。前几天我参考了这个链接。在我的机器上运行良好(GNU GCC编译器)。@green_claws Then
else a=0
也应该这样做。@ElliottFrisch这确实是一个解决方案。谢谢这是一个解决方案。请不要使用像“u”和“ur”这样愚蠢的缩写。拼写“你”和“你的”这两个词会使你的答案更容易阅读。谢谢。在C语言中,如何使scanf告诉数据输入的类型,整数、浮点或字符?您需要阅读
scanf
的文档,如果您的系统有手册页,可以通过运行
man scanf
)或
scanf
格式字符串与
printf
格式字符串相似(但不完全相同);它们实际上是一种小型专用语言中的小型程序。
terminator
对于告诉循环不要终止的变量来说是个糟糕的名字<代码>终止符=0将比
终止符-=1更清晰。很公平!竖起大拇指,我修改了这件作品。
while (1) {
    /* ... */
    if (...) {
        break;
    }
}
#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; 
}