我有以下代码。
#include <stdio.h>
int main () {
char letter1;
char letter2;
printf("Enter Letter 1: ");
letter1 = getchar();
printf("\n");
printf("Enter Letter 2: ");
letter2 = getchar();
printf("\n");
printf("%c - %c\n", letter1, letter2);
return(0);
}
我正在尝试使用getchar()
来定义letter1
和letter2
,但是它仅适用于letter1
,然后将letter2
的值设置为'\n'
。有谁知道解决方法,所以我可以为两个变量输入值吗?
答案 0 :(得分:1)
这是因为当您按下第一个字母并键入Enter键时,会将字母和'\n'
的代码一个接一个地发送到将要使用的输入缓冲区。
因此,第一个getchar()
获得您键入的字母的代码,因此该字母从输入缓冲区中删除,但\n
的字母保留下来,由下一个getchar()
占用。
为了避免这种情况,您需要不断消耗输入缓冲区,直到'\n'
被消耗为止。
一种实现方法是
int c;
while( (c=getchar())=='\n' && c!=EOF);
只要读取的字符是\n
并且未达到EOF,这将继续消耗输入缓冲区。 getchar()
会在错误时返回EOF
。
int letter1, letter2;
int c;
printf("Enter Letter 1: ");
letter1 = getchar();
printf("\n");
printf("Enter Letter 2: ");
while( (c=getchar())=='\n' && c!=EOF);
letter2=c;
printf("\n");
printf("%c - %c\n", letter1, letter2);
编辑:如注释中所指出,请注意getchar()
返回int
而不是char
。请参阅this帖子。