代码之家  ›  专栏  ›  技术社区  ›  Rhee

“输入”作为输入?

c
  •  0
  • Rhee  · 技术社区  · 16 年前

    这是我的密码!(对不起,我的英语很差)

    #include<stdio.h>
    
    int convert(char ch);
    
    int main(void)
    {
         char ch=0;
    
         while(ch != 'q')
         {
             ch=getchar();
             ch=convert(ch);
             if(ch == -1)
                printf("wrong input");
             else 
                putchar(ch);
                putchar('\n');
         }
    
         return 0;
    }
    
    int convert(char ch)
    {
        if(ch>='A' && ch<='Z')
            ch+=32;
        else if(ch>='a' && ch<='z')
            ch-=32;
        else
            return -1;
    }
    

    将小面额货币转换为大写面额货币,或将小面额货币转换为大写面额货币。

    但完成后,我发现了一些奇怪的东西,因为每当我在程序中添加字符时,

    它总是返回我期望的结果和另一个“错误输入”。 除了一个字符和一个回车符,我没有在我的标准输入中输入任何东西。

    所以,这是我的问题。

    函数getchar()或其他类似于fgetc、fgets的函数是否接收“enter”作为字符?

    5 回复  |  直到 16 年前
        1
  •  1
  •   LeopardSkinPillBoxHat    16 年前

    example code 来帮助你理解 getchar

    另外,我认为你需要把你的 else 括号内的条款。

    else 
        putchar(ch);
        putchar('\n');
    

    为此:

    else
    {
        putchar(ch);
        putchar('\n');
    }
    

    if/else 块,除非你把 { } 其周围的括号表示应将多条线视为单个块。

        2
  •  1
  •   Mark Byers    16 年前

    函数getchar()或其他函数 角色扮演?

    ch=getchar();
    printf("Received: %d\n", ch);
    ch=convert(ch);
    

    abc 收到:97

    收到:98

    收到:99

        3
  •  0
  •   Jeffrey Aylesworth    16 年前

    是的,会的。换行符是行的一部分,因此它将作为输入的一部分计算。

    您可能希望使用换行符作为退出程序的字符,除非您需要处理多行。

    do{}while loop

        4
  •  0
  •   pmg    16 年前

    getchar()

    您可以使用进行“回车”测试

    if (ch == '\n') { /* ... */ }
    

    此外,请注意,仅接收“回车”以外的字符 之后 输入“回车”。如果您键入“q”并等待5分钟,程序将在这5分钟内处于空闲状态,并且仅在您按“回车”后终止。

    这就是“行缓冲”输入背后的设计。

        5
  •  0
  •   Phil    16 年前