C 读取文件时,每隔一行打印一个空行
在我的.txt文件中,我有以下数据 名称:名称C 读取文件时,每隔一行打印一个空行,c,C,在我的.txt文件中,我有以下数据 名称:名称 分数:0.00% 名称:名称 分数:0.00% 名称:名称 得分:6.67% 我试着用这个代码 if (userAnswer1 == 3){ printf("Test History\n\n"); FILE * fPointer; fPointer = fopen("history.txt", "r"); char singleLine[50]; while(!
分数:0.00%
名称:名称
分数:0.00%
名称:名称
得分:6.67% 我试着用这个代码
if (userAnswer1 == 3){
printf("Test History\n\n");
FILE * fPointer;
fPointer = fopen("history.txt", "r");
char singleLine[50];
while(!feof(fPointer)) {
fgets(singleLine, 50, fPointer);
puts(singleLine);
int i;
for(i=0; i>=0; i++){
if(i%2==0){
printf("\n");
}
break;
}
}
fclose(fPointer);
}
要获得此输出,请执行以下操作:
名称:名称分数:0.00% 名称:名称
分数:0.00% 名称:名称
得分:6.67% 相反,我得到了低于输出的结果 测试历史 姓名:姓名 分数:0.00% 姓名:姓名 分数:0.00% 姓名:姓名 得分:6.67% 分数:6.67%两件事:函数写换行符;这些函数可以在缓冲区中包括换行符 这意味着当您打印
singleLine
时,首先会有一个换行符(因为fgets
将其放在那里),然后put
会编写自己的换行符
删除fgets
写入缓冲区的换行符,或者不使用put
while(!feof(fPointer)){
fgets(singleLine, 50, fPointer);
puts(singleLine);
int i;
for(i=0; i>=0; i++){
if(i%2==0){
printf("\n");
}
break;
}
}
有几件事需要注意:
put()
甚至自己添加了一个换行符int i;
for(i=0; i>=0; i++){
if(i%2==0){
printf("\n");
}
break;
}
你实际上是在打印一行新行,然后打破循环。所以它和平原没有区别
printf("\n");
打印3行换行符:一行是fgets()
写入缓冲区的内容,一行来自put()
,一行手动
要修复它们,您需要做两项工作:
从fgets()
提供的任何内容中删除换行符:
singleLine[strlen(singleLine) - 1] = '\0';
使循环工作得更好:
int i = 0; // Must initialize!
while (condition) {
other_statements;
i++;
if (i%2==0) {
printf("\n");
}
// Do nothing if 'i' is odd
}
当(!feof())
时停止使用。改为检查fgets
的返回值:
char *ret = fgets( ... );
if (ret == NULL)
break;
问题在于您的逻辑-您的'if'在'while'中,因此它循环并计数每个'while'(文件中的行)
我不是c语言专家,所以没有代码,但似乎你掌握了命令。我将使用的逻辑是查找行中的文本并从中添加“\n”
i、 e
添加\n这是无法复制的。任何地方都没有安德烈。请创建。请花一些时间阅读“for(i=0;i>=0;i++)”??这种情况是否不总是正确的(至少在包装前)?哦。。它类似于(;),但需要更多的输入:)@MartinJames即使它包装了,它也是。好的,所以我尝试了这个,但它现在除了空行之外不会打印任何东西。我猜单线[strlen(singleLine)-1]='\0';似乎把它全部去掉了,所以我更接近一个解决方案,int i=0;而(!feof(fPointer)){fgets(singleLine,50,fPointer);printf(“%s”,singleLine);i++;if(i%2==0){printf(“\n”);}这似乎有效,只是它再次打印出最后的分数;“分数:6.67%”@andre2012在(!feof())
时不要使用。请检查fgets
的返回值。感谢您的帮助,我并不真正理解,但youtube上的checket教程如果正确,将在回复中发布代码。@andre2012您不理解哪部分?
printf("Test History\n\n");
FILE *pToFile = fopen("history.txt", "r");
char input[50];
int i=0;
while(fgets(input, 50, pToFile)){
printf("%s", input);
i++;
if(i%2==0){
printf("\n");
}
}
fclose(pToFile);
printf("Test History\n\n");
FILE *pToFile = fopen("history.txt", "r");
char input[50];
int i=0;
while(fgets(input, 50, pToFile)){
printf("%s", input);
i++;
if(i%2==0){
printf("\n");
}
}
fclose(pToFile);