繁体   English   中英

基本的C编程_while_runtime错误

[英]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> ,并且编译器支持的话),但是也可以将int0表示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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM