C编程:scanf中的字符
有扫描字符问题…运行程序时不要让我输入一个字符程序当我输入整数打印printf并转到最后其他…
#include #include #define EG 0.23 #define AG 0.70 #define TG 0.15 main() { int posothta; char eidos; float poso; printf("Dwse posothta grammatosimwn: "); scanf("%d",&posothta); printf("Dwse to eidos grammatoshmou: "); scanf("%c",&eidos); if(eidos=='E' || eidos=='e'){ poso=posothta*EG; printf("To poso pou plirwnoume einai: %f",poso); }else if(eidos=='A' || eidos=='a'){ poso=posothta*AG; printf("To poso pou plirwnoume einai: %f",poso); }else if(eidos=='T' || eidos=='t'){ poso=posothta*TG; printf("To poso pou plirwnoume einai: %f",poso); }else{ printf("Kapou exei gine kapoio la9os"); } return 0; }
当你执行scanf()
它只取你要求的值…例如:
scanf("%d",&posothta);
假设我在这里输入5
。 真的, stdin
有2个字符: '5'
和'\n'
(因为我必须按Enter键并生成换行符)。
因此, posothta
是5,但是那个讨厌的新线还是坐在那里。 下一个scanf()
现在正在寻找一个字符,由于换行符( '\n'
)确实是一个字符,程序不会提问,它只是选择换行并继续前进。
将您的代码更改为:
scanf(" %c",&eidos);
将跳过告诉scanf()
“我希望你跳过任何空格字符,然后抓住下一个字符”。 对于scanf()
空格字符不仅包括空格,还包括换行符。
你需要闪存缓冲区:
printf("Dwse posothta grammatosimwn: "); scanf("%d",&posothta); flushall(); printf("Dwse to eidos grammatoshmou: "); scanf("%c",&eidos);
flushall()function:
#include int flushall( void );
描述:
flushall()函数清除与输入流关联的所有缓冲区,并写入与输出流关联的所有缓冲区。 对输入文件的后续读取操作导致从关联文件或设备读取新数据。
调用flushall()函数相当于为所有打开的流文件调用fflush()。
返回:
开放流的数量。 写入文件时发生输出错误时,将设置全局变量errno。