为什么不打印字符串的第一个字母?

时间:2016-10-06 13:48:19

标签: c scanf

我正在尝试编写一段代码,要求用户输入以输入其名称。然后它应该读取他们名字的每个字符并按我选择的格式(在下面的代码中,它在每个字符后添加一个新行)。

我遇到的问题是,当有人输入他们的名字时,它不会打印第一个字母,但打印出其余的字母。

例如,如果我输入Sneek,它只显示neek。

现在我是编程的初学者,对C来说更是如此,所以我想知道我的scanf语句或循环是否有问题。

另外,如果我输入Sneek它会显示neek但是如果我再次键入Sneek,它会显示为Sneek所以我假设循环没有错?

我在这个问题上搜索了很长一段时间,但我似乎找不到任何答案,任何帮助都会非常感激。

char ch;
printf("Please enter name:  ");
ch = scanf("%c", &ch);

while ((ch = getchar()) != EOF) {
    printf("%c\n", ch);

}
return 0;

4 个答案:

答案 0 :(得分:2)

评论ch = scanf("%c", &ch);。你正在消耗那里的第一个角色而从不打印它。

答案 1 :(得分:2)

代码片段中存在多个问题:

  • ch = scanf("%c", &ch);没有任何意义,甚至没有正确地将文件中的字节读入ch。请注意,scanf会将字节存储到ch中,但在将返回值存储到ch时会立即覆盖该字节。只需删除此行即可。

  • while ((ch = getchar()) != EOF) { printf("%c\n", ch); }对您的目的而言是正确的,但ch 的类型必须int而不是char以适应所有值unsigned char和特殊值EOF。正如当前编写的那样,在char是无符号类型的平台上,您的代码将无法在文件末尾停止。

答案 2 :(得分:0)

此语句通过scanf从标准输入中读取字符。

ch = scanf("%c", &ch);

此循环通过getchar从标准输入中读取字符。

while ((ch = getchar()) != EOF) {
    printf("%c\n", ch);

}

使用scanf读取后的第一个字符会发生什么?它被getchar的结果覆盖。

答案 3 :(得分:0)

我没有看到问题所在。你得到第一个角色。之后,您将获得并打印字符,直到EOF。

它没有打印第一个字符,因为你没有告诉它。