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。