簡體   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