【问题标题】:Basic C programming_while_runtime error基本 C 编程_while_runtime 错误
【发布时间】:2014-04-03 03:44:40
【问题描述】:

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

下面是工作说明:
测试一个只有一个重复的main()函数的程序:
1。要求用户输入一个整数,
2。读取一个整数,
3。处理整数如下:返回以终止程序为 0,为 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");
    }

}

【问题讨论】:

  • 可以加else break;吗?
  • Hello World 确实有效。前几天我提到了这个链接。stackoverflow.com/questions/10059511/…
  • 在我的机器上运行良好(GNU GCC 编译器)。
  • @green_claws 那么else a=0;也应该这样做。
  • @ElliottFrisch 这确实是一种解决方案。谢谢!

标签: c


【解决方案1】:

我建议不要使用ifelse,而是使用switch 语句

如果您只需要使用if else,则包含另一个else 声明提及。

else
    exit(0); 

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

【讨论】:

  • 这是一种解决方案。
  • 请不要使用愚蠢的缩写,如“u”和“ur”。拼出“you”和“your”这两个词可以让您的答案更容易阅读。
【解决方案2】:

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

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

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

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

int keep_going = 1;
while (keep_going) {
    /* ... */
    if (...) {
        keep_going = 0;
    }
}

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

while (1) {
    /* ... */
    if (...) {
        break;
    }
}

【讨论】:

  • 谢谢。 C语言中,如何让scanf判断数据输入的类型,整数、浮点数还是字符?
  • 您需要阅读scanf 的文档,如果您的系统有手册页,请运行man scanffinding it on the webscanf 格式字符串与printf 格式字符串相似(但不相同);它们实际上是一种小型专用语言的小程序。
【解决方案3】:
#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; 
}

【讨论】:

  • terminator 是告诉循环 not 终止的变量的糟糕名称。 terminator = 0; 会比 terminator -= 1; 清晰得多。
  • 很公平!竖起大拇指,我已经修改了这篇文章。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多