do-while 循环中 scanf() 的未定义行为

问题描述 投票:0回答:1

我目前正在通过一本“C Programming a modern approach”一书学习C并遇到这段代码。当我尝试运行它时,在键入“abc”等连续字符并按 Enter(新行)后,没有打印任何内容。请解释这里发生了什么。

char ch;
do {
    scanf("%c" , &ch);
} while (ch != '\n');
printf("%c", ch);
c input character scanf do-while
1个回答
0
投票

你要求用户使用 scanf 输入一个字符。这是循环发生的until用户输入' ' 或换行符(与按回车键相同),这是循环中断的时间。

你的 print 语句将打印变量 ch 中的字符,此时它将是 ' '(因为此变量仅存储一个字符,即您键入的最后一个字符)。

当您运行程序时,这个换行符可能是不可见的,所以您可能看不到它。您可以在循环之后添加另一个 print 语句,如果该 print 语句以换行符开始,您就知道 ' ' 打印在上一行。

类似的东西:

char ch;
do {
    scanf("%c" , &ch);
} while (ch != '\n');
printf("%c", ch);
printf("I should show up on a newline");
© www.soinside.com 2019 - 2024. All rights reserved.