我正在尝试编写一段代码,要求用户输入以输入其名称。然后它应该读取他们名字的每个字符并按我选择的格式(在下面的代码中,它在每个字符后添加一个新行)。
我遇到的问题是,当有人输入他们的名字时,它不会打印第一个字母,但打印出其余的字母。
例如,如果我输入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;
答案 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。
它没有打印第一个字符,因为你没有告诉它。