C程序中的文件结束(EOF)
我编写了一个简单的C程序,当输入C程序中的文件结束(EOF),c,eof,getchar,C,Eof,Getchar,我编写了一个简单的C程序,当输入EOF字符(windows为Ctrl-Z)时,该程序需要完成,并且应该打印: 如果等级高于或等于5,则通过 如果等级高于或等于8,则以高通通过 任何其他情况下均失败 我使用getchar() #包括 int main(){ 国际等级; 放置(“输入等级”\n); puts(“输入EOF字符以结束输入\n”); 而((grade=getchar())!=EOF){ 如果(等级>=5){ 认沽权(“通过”); 如果(等级>=8){ puts(“带高通\n”); }
EOF
字符(windows为Ctrl-Z)时,该程序需要完成,并且应该打印:
- 如果等级高于或等于5,则通过
- 如果等级高于或等于8,则以高通通过
- 任何其他情况下均失败
getchar()
#包括
int main(){
国际等级;
放置(“输入等级”\n);
puts(“输入EOF字符以结束输入\n”);
而((grade=getchar())!=EOF){
如果(等级>=5){
认沽权(“通过”);
如果(等级>=8){
puts(“带高通\n”);
}
}否则{
puts(“失败的\n”);
}
}
返回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;
您得到的是输入数字的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;
程序无法按预期运行,原因有二:
- 从
stdin
读取的字节不是数值:如果用户键入1
,程序将接收'1'
,它是字符值,而不是数值。您可以通过减去'0'
的字符值来计算数字字符的数值:
int c = getchar();
if (c >= '0' && c <= '9') {
int grade = c - '0';
/* you can now test the grade */
程序无法按预期运行,原因有二:
- 从
stdin
读取的字节不是数值:如果用户键入1
,程序将接收'1'
,它是字符值,而不是数值。您可以通过减去'0'
的字符值来计算数字字符的数值:
int c = getchar();
if (c >= '0' && c <= '9') {
int grade = c - '0';
/* you can now test the grade */
您可以进行简单的转换,例如:int grade\u as\u int=(int)grade代码>@m.nachury-你不能。它不会将'1'
转换为整数1。它将等级分配为等级的ascii码。如果插入的数字超过一位,则“高通”将全部通过,它将刷新第二位而不是\n
,因此对于45
,输出失败。这是错误的。这是所问问题的答案。与你交谈是毫无意义的。我只是想告诉你,对于更高的输入来说,9
是错误的。因为OP writed grade大于或等于8,而位数较多的数字大于或等于8。您可以进行简单的转换,例如:int grade\u as\u int=(int)grade代码>@m.nachury-你不能。它不会将'1'
转换为整数1。它将等级分配为等级的ascii码。如果插入的数字超过一位,则“高通”将全部通过,它将刷新第二位而不是\n
,因此对于45
,输出失败。这是错误的。这是所问问题的答案。与你交谈是毫无意义的。我只是想告诉你,对于更高的输入来说,9
是错误的。因为OP WRITED grade大于或等于8,且数字较多的数字大于或等于8。请注意,EOF
不是字符,而是遇到文件结束条件时(或某些情况下出现错误时)某些函数返回值的宏。如果用户输入“A”而不是8怎么办?请注意,EOF
不是字符,而是遇到文件结束条件时(或在某些情况下出现错误时)某些函数返回的值的宏。如果用户输入“A”而不是8怎么办?足够清楚。谢谢:)够清楚了。谢谢:)