首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本C programming_while_runtime误差

基本C programming_while_runtime误差
EN

Stack Overflow用户
提问于 2014-03-02 04:44:35
回答 3查看 103关注 0票数 0

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

以下是工作指导:

只使用main()函数反复测试程序:

1.请求用户输入一个整数,

2.读取整数,

3.按如下方式处理整数:返回0终止程序,1打印“1”,2打印“2”,对任何其他整数打印"I‘不知道“。

例如,以下是可能出现在终端上的序列,其中整数由用户输入:

请输入一个整数

2

请输入一个整数

33

我不知道

请输入一个整数

1

请输入一个整数

下面是我的密码。

谢谢你帮忙。

代码语言:javascript
复制
#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");
    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-07 07:48:48

代码语言:javascript
复制
#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; 
}
票数 0
EN

Stack Overflow用户

发布于 2014-03-02 22:08:39

您的循环从未终止,因为您从未告诉它终止。它继续执行,只要a != 0。如果将a初始化为1,则永远不会更改它,因此自然会有一个无限循环。

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

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

您似乎打算使用a来确定循环是否应该继续执行。您应该给它一个更有意义的名称,比如keep_going。你可以把它变成一个bool (如果你有#include <stdbool.h>,如果你的编译器支持它),但是用int0来表示false,使用1表示true也可以。

代码语言:javascript
复制
int keep_going = 1;
while (keep_going) {
    /* ... */
    if (...) {
        keep_going = 0;
    }
}

或者您可以编写一个无限循环并使用break终止它:

代码语言:javascript
复制
while (1) {
    /* ... */
    if (...) {
        break;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-02 04:53:22

与其使用if else,我建议使用switch语句

如果只需要使用if else,则包括另一个提到的else语句。

代码语言:javascript
复制
else
    exit(0); 

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22123975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档