'输入'作为输入?

时间:2009-11-19 00:37:04

标签: c

这是我的代码!(抱歉我的英语不好)

#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接收'enter'作为字符?

5 个答案:

答案 0 :(得分:1)

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

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

改变这个:

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

到此:

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

在C / C ++中,只有第一行代码会在if/else块中执行,除非你在其周围添加{}括号以指示应该有几行被认为是一个单一的块。

答案 1 :(得分:1)

  

函数getchar()或其他函数   像fgetc一样,fgets接收'enter'为   一个字符?

是的,'输入'是字符10.您可以通过添加一行来看到这一点:

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

ABC 收到:97

收到:98

收到:99

收到:10

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

是的,getchar()收到'enter'以及您键入的任何其他字符。

您可以使用

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

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

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

答案 4 :(得分:0)

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