我想写一个程序,它可以: 当我进入时,说“ 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;
}
答案 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
}