該程式會提示用戶輸入測驗成績并將其存盤在陣列中。用戶最多可以輸入 10 個等級,但可以輸入更少。程式應該進行錯誤檢查:如果用戶輸入了一個無效的成績,程式應該回圈直到用戶正確輸入一個有效的成績
#include <stdio.h>
#define N 10 /* number of students in class */
int main()
{
int quiz[N], /* array of quiz grades */
grade, /* used to read in one grade */
last, /* index of last element used */
i, /* loop variable */
ib /* input buffer */;
char c;
last = -1;
printf("Enter the quiz grade: ");
while (ib=scanf("%d",&grade) && last<N-1)
{
if(ib == 0 ){
printf("Please enter a valid quiz grade: ");
while((c=getchar())!='\n' && c!=EOF);
}
else
if(grade >= 0 && grade <= 10)
{
last ;
quiz[last] = grade;
}
else{
printf("Enter a quiz grade between 0 and 10");
}
}
}
此代碼不會在輸入的等級數處停止,而是用最后一個等級填充陣列,直到其大小為 N。
此外,當用戶輸入非數字輸入時,程式會在應提示用戶輸入有效成績時停止
uj5u.com熱心網友回復:
至少有一個錯誤在這里:
while (ib=scanf("%d",&grade) && last<N-1)
假設scanf回傳零(即ib變為零),則以上相同:
while (0 && last<N-1)
這與
while (0)
這意味著當輸入不是數字的內容時,您的回圈將停止。
另請注意,由于上述原因,ib執行時不能為零:
if(ib == 0 ){
// So this code can't be reached
printf("Please enter a valid quiz grade: ");
while((c=getchar())!='\n' && c!=EOF);
}
要解決此問題,您可以將條件scanf移出while。喜歡:
while (last<N-1)
{
ib=scanf("%d",&grade);
if(ib != 1 ) // Notice this change
{
if (ib == EOF) exit(1); // Check for fatal input error
printf("Please enter a valid quiz grade: ");
while((c=getchar())!='\n' && c!=EOF);
if (c == EOF) exit(1); // Check for fatal input error
}
else
{
...
}
}
也更改char c;為int c;asgetchar回傳 anint以處理 EOF
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367266.html
上一篇:除了“intmain(intargc,char**argv)”之外,我可以安全地使用名稱中包含“main”的函式嗎?
