c语言 - 如果我在调用它之前放置一些代码,为什么我的函数 read() 不起作用?



当我调用函数read((时,在它完美工作之前没有放入循环或类似的东西,但当我添加一些代码时,它不工作,下面是代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char read();
int main()
{
int level = -1;
char c;
while (level < 1 || level > 3)
{
printf("Select a level 1/2/3 : ");
scanf("%d", &level);
}
printf("Put a character : ");
c = read();
printf("Your character : %c", c);

return 0;
}
char read()
{
char letter;
letter = getchar();
letter = toupper(letter);
while (getchar() != 'n');    
return letter;
}

函数getchar也读取空白字符,例如可以在调用后放入输入缓冲区的换行符'n'

scanf("%d", &level);

在while循环中。

在函数中使用scanf的调用而不是getchar

char read()
{
char letter = '';
scanf( " %c", &letter );
letter = toupper(( unsigned char )letter);
return letter;
}

请注意格式字符串中转换说明符%c之前的空格。它允许跳过输入流中的空白。

或者功能可以看起来像

char read()
{
char letter = '';
scanf( " %c", &letter );
letter = toupper( ( unsigned char )letter );
int dummy;
while ( ( dummy = getchar() ) != EOF && dummy != 'n' );
return letter;
}

最新更新