C中的getchar问题

时间:2011-06-05 08:56:43

标签: c getchar

我想写一个程序,它可以: 当我进入时,说“ Alan Turing ”,它输出“图灵,A ”。 但对于我的后续程序,它输出“ uring,A ”,我想了很长时间但未能弄清楚 T 的去向。 这是代码:

#include <stdio.h>
int main(void)
{
char initial, ch;

//This program allows extra spaces before the first name and between first name and second name, and after the second name.

printf("enter name: ");

while((initial = getchar()) == ' ')
    ;

while((ch = getchar()) != ' ')  //skip first name
    ;

while ((ch = getchar()) == ' ')
{
    if (ch != ' ')
        printf("%c", ch);  //print the first letter of the last name
}
while((ch = getchar()) != ' ' && ch != '\n')
{
    printf("%c", ch);
}
printf(", %c.\n", initial);

return 0;
}

3 个答案:

答案 0 :(得分:3)

你的错误在这里:

while ((ch = getchar()) == ' ')
{
    if (ch != ' ')
        printf("%c", ch);  //print the first letter of the last name
}
while((ch = getchar()) != ' ' && ch != '\n')
{
    printf("%c", ch);
}

第一个循环读取字符,直到找到非空格。那是你的'T'。然后第二个循环用下一个字符'u'覆盖它,并打印出来。 如果您将第二个循环切换为do {} while();,它应该可以正常工作。

答案 1 :(得分:2)

while ((ch = getchar()) == ' ')
{
    if (ch != ' ')
        printf("%c", ch);  //print the first letter of the last name
}

这部分是错误的。其中的if将永远不会匹配,因为该块仅在ch == ' '时运行。

while ((ch = getchar()) == ' ');
printf("%c", ch);  //print the first letter of the last name

应该修复它。

请注意,getchar会返回int,而不是char。如果您想在某个时间点检查文件末尾,如果您将getchar的返回值保存在char中,则会向您发送字段。

答案 2 :(得分:0)

使用getchar()从标准输入中读取字符串并不是很有效。您应该使用read()或scanf()将输入读入缓冲区,然后处理您的字符串。 这会容易得多。

无论如何,我添加了一个评论,你的错误是。

while((ch = getchar()) != ' ')  //skip first name
    ;

// Your bug is here : you don't use the character which got you out of your first loop.

while ((ch = getchar()) == ' ')
{
    if (ch != ' ')
        printf("%c", ch);  //print the first letter of the last name
}