[英]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>
,並且編譯器支持的話),但是也可以將int
為0
表示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.