为什么我的函数 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 = '\0';
    scanf( " %c",&letter );
    letter = toupper(( unsigned char )letter);
    return letter;
}

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

或者函数看起来像

char read()
{
    char letter = '\0';

    scanf( " %c",&letter );
    letter = toupper( ( unsigned char )letter );

    int dummy;
    while ( ( dummy = getchar() ) != EOF && dummy != '\n' );

    return letter;
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...