scanf字符出现问题…当运行程序时,不要让我输入字符,当我输入整数时,程序打印printf,然后转到最后一个else…
#include <stdio.h>
#include <stdlib.h>
#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'
(因为我必须按回车键并生成换行符)。
所以在posothta
中加入了5,但是那个讨厌的换行符留在了那里。下一个scanf()
现在正在寻找一个字符,由于换行符('n'
)确实是一个字符,因此程序不会问任何问题,它只是选择该换行符并继续前进。
把你的代码改成:
scanf(" %c",&eidos);
Will skip告诉scanf()
"我想让你跳过任何空白字符,然后抓住下一个"。对于scanf()
,空白字符不仅包括空格,还包括换行符。
你需要flash缓冲区:
printf("Dwse posothta grammatosimwn: ");
scanf("%d",&posothta);
flushall();
printf("Dwse to eidos grammatoshmou: ");
scanf("%c",&eidos);
flushall()函数:
#include <stdio.h>
int flushall( void );
描述:
flushall()函数清除与输入相关的所有缓冲区流,并写入与输出流关联的任何缓冲区。一个对输入文件的后续读取操作将导致读取新的数据
调用flushall()函数相当于调用fflush()对于所有打开的流文件。
的回报:
打开的流的数量。在写入时发生输出错误对于一个文件,全局变量errno被设置。