[英]End of File (EOF) in C program
我編寫了一個簡單的C程序,需要在輸入EOF
字符時完成(對於Windows則為Ctrl-Z ),並且應該打印:
我使用getchar()
作為用戶輸入(在這種情況下為等級)。
#include <stdio.h>
int main() {
int grade;
puts("Enter a grade\n");
puts("Enter the EOF character to end input\n");
while ((grade = getchar()) != EOF) {
if (grade >= 5) {
puts("Passed");
if (grade >= 8) {
puts("with High Pass\n");
}
} else {
puts("Failed\n");
}
}
return 0;
}
問題是程序沒有按照預期的方式運行,如果您能幫助我找到解決方案,我將不勝感激。
該程序無法正常運行,原因有兩個:
從stdin
讀取的字節不是數字值:如果用戶類型為1
,則程序會收到字符值而不是數字值'1'
。 您可以通過減去字符值'0'
來計算數字字符的數值:
int c = getchar(); if (c >= '0' && c <= '9') { int grade = c - '0'; /* you can now test the grade */
您一次讀取一個標准輸入:不允許等級超過9
。 如果用戶輸入10
,則將測試2個等級並輸出Failed!
兩次。
這是帶有scanf()
的替代版本:
#include <stdio.h>
int main(void) {
int grade;
puts("Enter the grades\n");
puts("Enter the EOF character to end input\n");
while (scanf("%d", &grade) == 1) {
if (grade >= 8) {
puts("Passed with High Pass");
} else
if (grade >= 5) {
puts("Passed");
} else {
puts("Failed\n");
}
}
return 0;
}
您會得到輸入數字的ASCII碼,而不是其值。 將其轉換為比較前的數字。
while ((grade = getchar()) != EOF) {
getchar(); // flush the \n
if (isdigit(grade))
{
int intgrade = grade - '0';
if (intgrade >= 5) {
puts("Passed");
if (intgrade >= 8) {
puts("with High Pass\n");
}
}
else {
puts("Failed\n");
}
}
else printf("Wrong entry\n");
}
return 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.