基本C编程_while_runtime错误

时间:2014-03-02 04:44:35

标签: c

作为初学者,我在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");
    }

}

3 个答案:

答案 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; 
}