fscanf读文件 中断

来源:百度知道 编辑:UC知道 时间:2024/05/25 11:11:02
我的写的程序是这样的,其他都正确,我给大家截取一段 我是读这个TXT文件,里面是这样的
乡村1201
乡村1202
乡村1210
乡村1211
这样是没问题的
但是如果变成
乡村1201
乡村1202

乡村1211
就是有一项数据是空的时候读取就中断了。怎么来解决这个问题。
我是用循环来读取的。
fp=fopen(FileName,"rb");

for(i=0;i<LEN1;i++)
{
fscanf(fp,"%s",Root.Country[i].CountryName);
}

大家帮忙看下
我不知道是 fscanf的问题 还是fprintf的问题。我输出的是这样的
乡村2221,0/2,2,2,乡村2222,1/2,2,2,烫烫烫烫烫烫烫烫烫烫,2/

这里面有格式 我们不考虑
反正之间就会出问题。

我想要这50分。
对于你的问题用行读入函数fgets()一句话问题就解决了。如果用fscanf()函数也是完全可以的,只要加上fscanf()函数返回值作为判断条件。设文件A.txt内容如下:
乡村1201
乡村1202

乡村1203
乡村1204
乡村1205
乡村1206

乡村1207
乡村1208

乡村1209
以下给出两种方法,程序执行后结果都正确,同时你可以看到它们有一点区别,即fgets()会保留原文件A.txt中的空行,而fscanf()不会,这和scanf()的特性是完全一致的。以下程序在Dev-c++下已调试通过。
#include<stdio.h>
#define N 100 /* 设文章不超过255行,可更改 */

int main()
{
int i=0,max;
char s[N][81],*p,*q="A.txt";/*设每行不超过80字符,可更改*/
FILE *fp,*fp1;
fp1=fopen("B.txt","w");
if((fp=fopen("A.txt","r"))==NULL)
{ printf("Open file %s error! Strike any key to exit.",q);
getch();
exit(0);
}
while (i<N&&fgets(s[i],81,fp)!=NULL)/* 一个语句解决所有问题 */
{ /* 当fgets()==NULL表示已到文章末尾 */
p=strchr(s[i],'\n'); /* 消除每行最后的回车符,消除干扰 */
if(p)
*p='\0';
i++;