【问题标题】:'Enter' as an input?“输入”作为输入?
【发布时间】:2009-11-19 00:37:03
【问题描述】:

这是我的代码!(对不起我的英语不好)

#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;
}

这段代码用于将A更改为a,将z更改为Z 将小写字母转换为大写字母,或反向。

但完成后,每当我将字符放入程序时,我都会发现一些奇怪的东西,

它总是返回我预期的结果和另一个“错误输入”。 除了字符和 Enter 之外,我没有在标准输入中添加任何内容。

所以,这是我的问题。

函数 getchar() 或其他类似 fgetc 的函数,fgets 接收一个“输入”作为字符?

【问题讨论】:

    标签: c


    【解决方案1】:

    函数 getchar() 或其他一些 像 fgetc 一样,fgets 收到一个“输入”作为 一个角色?

    是的,'Enter' 是第 10 个字符。你可以通过添加一行来看到这一点:

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

    abc 收到:97

    收到:98

    收到:99

    收到:10

    【讨论】:

    • 非常清楚,谢谢。但是有什么替代品吗?我不想把“输入”作为输入。只需添加一个 elseif ch=10?
    • 是的,但它是带有两个等号的 ch==10(或 ch == '\n',为了清楚起见)。
    【解决方案2】:

    这里有一些example code,可以帮助你更多地了解getchar

    另外,我认为您需要将 else 子句放在括号中。

    改变这个:

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

    到这里:

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

    在 C/C++ 中,只有第一行代码将在 if/else 块中执行,除非您将 {} 括在括号中以指示应将多行视为单个块。

    【讨论】:

      【解决方案3】:

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

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

      编辑:您可能还想使用 do{}while loop 而不是传统的 while 循环

      【讨论】:

      • 如果我不希望换行符作为字符,我该如何处理这段代码?
      • dowhile 循环对传统循环有何改进?
      【解决方案4】:

      是的,getchar() 会收到“输入”以及您键入的任何其他字符。

      您可以使用

      测试“输入”
      if (ch == '\n') { /* ... */ }
      

      另外,请注意,“enter”以外的字符只有在您键入“enter”之后才会收到。如果你输入 'q' 并等待 5 分钟,程序将在这 5 分钟内处于空闲状态,并且只有在你按下 'enter' 后才会终止。

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

      【讨论】:

        【解决方案5】:

        我想这个问题已经回答过了,但在我看来,convert 有一个没有人提到过的问题。字符是按值传递的,所以加减 32 对 ch 没有影响。此外,convert 显式返回的唯一值是 -1。我看不出这段代码如何按预期工作。

        【讨论】:

        • 因为代码的目的不是改变字符,只是转换并输出(打印)它。我能理解你的意思。但它在目的下起作用。
        • 和 ch=convert(ch);可以做那个功能
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        • 2011-12-04
        相关资源
        最近更新 更多