为什么在打印一行文件时光标会转到下一行?
Why cursor goes to next line while printing a file of one line?
我有下面的 C 程序来打印文件的内容并计算其中的字符总数。
#include<stdio.h>
#include<stdlib.h>
int main()
{
/*Declaring a FILE pointer fp.*/
FILE *fp;
char ch;
int noc = 0;
/*Using fopen() to get the address of the FILE structure, and store it in fp*/
fp = fopen("poem.txt","r");
if (fp == NULL)
{
printf("Error opening file");
exit(1);
}
while(1)
{
ch = fgetc(fp);
if (ch == EOF) /* EOF will be there at the end of the file.*/
break;
noc++;
printf("%c",ch); /* Printing the content of the file character by character*/
}
//printf("\n");
close(fp); /* We need to fclose() the fp, because we have fopen()ed */
printf("\tNumber of characters: %d\n",noc);
return 0;
}
/*One interesting observation: There is an extra new line printed. Why ???*/
文件poem.txt 只有一行。以下是poem.txt
的内容
以结尾开头
我在写这个文件的时候没有按回车键所以它只有一行。
-bash-4.1$ wc poem.txt
1 5 24 poem.txt
-bash-4.1$
你可以看到 wc 证实了这一点(但是我仍然不明白为什么 wc 给出的字符数是 24,而不是 23)。
下面是这个程序的输出。
-bash-4.1$ ./a.out
It starts with the end.
Number of characters in this file: 24
-bash-4.1$
你可以看到打印完文件的所有字符后,即使我在打印文件的所有字符后注释了printf("\n"),光标也被带到了下一行。
为什么光标移到新行?我希望光标在打印文件的所有字符后位于同一行,因此在下一个 printf 中使用了 \t。
您还看到我的程序说字符数是 24(与 "wc poem.txt" 输出内联)。
所以我很困惑为什么在打印文件的最后一个字符后光标会转到新行?另外,为什么字符总数 (noc) 是 24 而不是 23?
P.S。尽管我对 "wc" 显示的字符数有相同的问题,但您可以忽略 "wc" 输出,但行数除外。我可能 post 下一个问题。
谢谢。
Why is the cursor taken to new line?
- 因为
'\n'
字符在文件中
Also you see that my program says that number of characters is 24 (which is inline with "wc poem.txt" output).
- 因为打印出来的23个字符加上
'\n'
都在文件里了
您可以尝试转义空白字符以查看它们,因为它们是不可见的,所以像这样
while ((ch = fgetc(fp)) != EOF)
{
noc++;
if (isspace(ch) != 0)
printf("\%02X", ch);
else
printf("%c", ch);
}
这样你会看到每个字符,你需要包括 <ctype.h>
注意:恕我直言,只有在非常特殊的情况下才需要使用break
,我不喜欢它,因为它很难遵循程序流程。
我有下面的 C 程序来打印文件的内容并计算其中的字符总数。
#include<stdio.h>
#include<stdlib.h>
int main()
{
/*Declaring a FILE pointer fp.*/
FILE *fp;
char ch;
int noc = 0;
/*Using fopen() to get the address of the FILE structure, and store it in fp*/
fp = fopen("poem.txt","r");
if (fp == NULL)
{
printf("Error opening file");
exit(1);
}
while(1)
{
ch = fgetc(fp);
if (ch == EOF) /* EOF will be there at the end of the file.*/
break;
noc++;
printf("%c",ch); /* Printing the content of the file character by character*/
}
//printf("\n");
close(fp); /* We need to fclose() the fp, because we have fopen()ed */
printf("\tNumber of characters: %d\n",noc);
return 0;
}
/*One interesting observation: There is an extra new line printed. Why ???*/
文件poem.txt 只有一行。以下是poem.txt
的内容以结尾开头
我在写这个文件的时候没有按回车键所以它只有一行。
-bash-4.1$ wc poem.txt
1 5 24 poem.txt
-bash-4.1$
你可以看到 wc 证实了这一点(但是我仍然不明白为什么 wc 给出的字符数是 24,而不是 23)。
下面是这个程序的输出。
-bash-4.1$ ./a.out
It starts with the end.
Number of characters in this file: 24
-bash-4.1$
你可以看到打印完文件的所有字符后,即使我在打印文件的所有字符后注释了printf("\n"),光标也被带到了下一行。
为什么光标移到新行?我希望光标在打印文件的所有字符后位于同一行,因此在下一个 printf 中使用了 \t。
您还看到我的程序说字符数是 24(与 "wc poem.txt" 输出内联)。
所以我很困惑为什么在打印文件的最后一个字符后光标会转到新行?另外,为什么字符总数 (noc) 是 24 而不是 23?
P.S。尽管我对 "wc" 显示的字符数有相同的问题,但您可以忽略 "wc" 输出,但行数除外。我可能 post 下一个问题。
谢谢。
Why is the cursor taken to new line?
- 因为
'\n'
字符在文件中
Also you see that my program says that number of characters is 24 (which is inline with "wc poem.txt" output).
- 因为打印出来的23个字符加上
'\n'
都在文件里了
您可以尝试转义空白字符以查看它们,因为它们是不可见的,所以像这样
while ((ch = fgetc(fp)) != EOF)
{
noc++;
if (isspace(ch) != 0)
printf("\%02X", ch);
else
printf("%c", ch);
}
这样你会看到每个字符,你需要包括 <ctype.h>
注意:恕我直言,只有在非常特殊的情况下才需要使用break
,我不喜欢它,因为它很难遵循程序流程。