微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的函数 read() 在调用之前放置一些代码不起作用?

如何解决为什么我的函数 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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。