C 为什么在打印一行文件时光标移到下一行?
我有下面的C程序来打印文件的内容并计算其中的字符总数C 为什么在打印一行文件时光标移到下一行?,c,file,io,cursor,printf,C,File,Io,Cursor,Printf,我有下面的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
#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 ???*/
你可以看到wc证实了这一点(但是我仍然不明白为什么wc给出的字符数是24,而不是23)
下面是这个程序的输出。
-bash-4.1$./a.out
从结尾开始。
此文件中的字符数:24
-bash-4.1$
您可以看到,在打印文件的所有字符后,光标会移到下一行,即使在打印文件的所有字符后,我已经对printf(“\n”)进行了注释
为什么光标被移到新行?在打印文件的所有字符后,我希望光标位于同一行,因此在下一个printf中使用了\t
您还可以看到,我的程序说字符数是24(这与“wc poem.txt”输出是内联的)
所以我很困惑,为什么在打印文件的最后一个字符后,光标会移到新行?另外,为什么字符总数(noc)是24而不是23
另外,虽然我对“wc”所显示的字符数有相同的问题,但您可以忽略“wc”输出,除非是行数。我可能会就此提出下一个问题
谢谢
为什么光标被移到新行
- 因为
字符在文件中'\n'
- 因为打印的23个字符加上
都在文件中'\n'
while ((ch = fgetc(fp)) != EOF)
{
noc++;
if (isspace(ch) != 0)
printf("\\%02X", ch);
else
printf("%c", ch);
}
这样,您将看到每个字符,您需要包括
注意:只有在非常特殊的情况下才需要使用
break
,我不喜欢它,因为它很难遵循程序流程。将每个字符打印为ascii值,然后查看最后一个字符的代码:)(使用printf(“%d”,ch);
)@JanLegner Yea我这样做了,它打印了24个数字(令我惊讶的是),最后一个数字是10(换行)。但是为什么在编写此文件时没有按ENTER键出现这一新行呢?它只有一行!!!您不能保证您的文本编辑器没有在文件末尾添加任何新行…请尝试使用echo创建它,它从结尾开始。>outputFile.txt
和echo-n它从结尾开始。>outputFile.txt
和见difference@JanLegner哦,所以vi最后添加了\n。我在vi编辑器中键入了这一行。我尝试了这两个echo和echo-n,现在我看到了区别。接下来我将使用C程序创建一个文件,而不放置任何\n。希望我的疑问届时会消除。我将在此处更新。@JanLegner确认!!vi编辑器正在添加新行。我创建了一个file使用C程序并在其中输入no\n。现在上面的“wc”和我的程序都没有显示新行。非常感谢。是的,我按照你的建议做了,它打印了24个1。但基本上这正是我的问题。这个\n来自哪里(第24个字符)?看起来vi编辑器正在添加\n。也感谢您建议更小心地使用break。接下来我将使用C代码创建一个文件,但不放任何\n。然后我想我所有的疑问都会消除。已确认!!vi编辑器正在添加新行。我使用C程序创建了一个文件,但没有放任何\n在其中。现在都是“wc”我上面的节目没有新台词,谢谢。