为什么 printf("\n") 不转到下一行?
Why printf("\n") doesn't go to the next line?
我正在尝试编写一个简短的程序,将每个单词放在一个新行上。新行可以通过制表符、space 或回车确认。程序的结尾是在控制台中输入“#”。我遇到的问题是,当我将 "enter" 放入控制台时,它会在同一行中写入下一个字符。
第二个想法是将所有这些都放在一个 table 中,这样我就可以在最后将所有格式化的文本放在一起。我也想不通。
#include<stdio.h>
#include <conio.h>
#define STOP '#'
int main()
{
char ch;
while ((ch = (_getch())) != STOP) {
switch (ch) {
case '\n':
printf("\n");
break;
case '\t':
printf("\n");
break;
case ' ':
printf("\n");
break;
default:
putchar(ch);
}
}
printf("\nEND");
_getch();
return 0;
}
因为点击 "enter" 会发出回车符 return 字符 (\r
),而不是换行符。
当我按下 "enter" 时光标跳回行首时我注意到了。
像这样修正你的代码(也分解 case
语句):
#include<stdio.h>
#include <conio.h>
#define STOP '#'
int main()
{
char ch;
while ((ch = (_getch())) != STOP) {
switch (ch) {
case ' ':
case '\t':
case '\r': // what was missing
printf("\n");
break;
default:
putchar(ch);
}
}
printf("\nEND");
_getch();
return 0;
}
你可能会得到一个马车 return ('\r'
),这是 Return 通常生成的马车。
所以你也需要检查一下。您的代码可以简化:
int main(void)
{
while((ch = _getch()) != STOP)
{
if(ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t')
ch = '\n';
putchar(ch);
}
}
由于每次迭代我们始终只打印一个字符,因此无需使用多个打印函数。此外,使用 printf()
打印单个常量字符是多余的。
我正在尝试编写一个简短的程序,将每个单词放在一个新行上。新行可以通过制表符、space 或回车确认。程序的结尾是在控制台中输入“#”。我遇到的问题是,当我将 "enter" 放入控制台时,它会在同一行中写入下一个字符。
第二个想法是将所有这些都放在一个 table 中,这样我就可以在最后将所有格式化的文本放在一起。我也想不通。
#include<stdio.h>
#include <conio.h>
#define STOP '#'
int main()
{
char ch;
while ((ch = (_getch())) != STOP) {
switch (ch) {
case '\n':
printf("\n");
break;
case '\t':
printf("\n");
break;
case ' ':
printf("\n");
break;
default:
putchar(ch);
}
}
printf("\nEND");
_getch();
return 0;
}
因为点击 "enter" 会发出回车符 return 字符 (\r
),而不是换行符。
当我按下 "enter" 时光标跳回行首时我注意到了。
像这样修正你的代码(也分解 case
语句):
#include<stdio.h>
#include <conio.h>
#define STOP '#'
int main()
{
char ch;
while ((ch = (_getch())) != STOP) {
switch (ch) {
case ' ':
case '\t':
case '\r': // what was missing
printf("\n");
break;
default:
putchar(ch);
}
}
printf("\nEND");
_getch();
return 0;
}
你可能会得到一个马车 return ('\r'
),这是 Return 通常生成的马车。
所以你也需要检查一下。您的代码可以简化:
int main(void)
{
while((ch = _getch()) != STOP)
{
if(ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t')
ch = '\n';
putchar(ch);
}
}
由于每次迭代我们始终只打印一个字符,因此无需使用多个打印函数。此外,使用 printf()
打印单个常量字符是多余的。