请各位帮忙看看!!老是出问题!!
下面这段程序,我觉得是正确的,但是运行的结果在我意料之外
先请看程序:
#include <stdio.h>
void print (void);
struct by
{
char keep[15];
};
struct by save[999];
void print (void)
{
FILE *inputfirst;
int i=0,y=0;
char temp;
char temp1[10];
printf ("请输入您要比较的文件名(如:test.txt):");
scanf ("%10s",temp1);
inputfirst = fopen (temp1,"r");
if (inputfirst == NULL)
{
printf ("没找到您输入的文件名,请重新输入!\n");
exit(1);
}
do
{
do
{
temp = getc (inputfirst);
save[i].keep[y] = temp;
++y;
}while (temp != '\n');
save[i].keep[y -1] = '\0';
++i;
}while (temp != EOF);
printf ("%s\n",save[0].keep); \\打印测试一下
}
int main (void)
{
print();
return 0;
}
这段是我想把一个文本文件里面的数据读取到结构中去。
因为我文本中的结构是这样的
1.4.G.G01.00341
1.4.G.G01.00351
1.4.G.G01.00343
1.4.G.G01.00345
1.4.G.G01.00349
1.4.G.G01.00353
1.4.G.G01.00352
1.4.G.G01.00335
1.4.G.G01.00347
1.4.G.G01.00336
1.4.G.G01.00003
1.4.G.G01.00023
所以,当遇到'\n'符号的时候就把前面读到的,存到一个结构成员中去。
用EOF做文件结尾的判断。
但是奇怪的是,如果我拿走
do
{
}while (temp != EOF);
这个外层循环的话,那就能读出一排来,但是加上这个就变成死循环了,而且,结构里面也没能存到字符。
请各位帮我看看,到底问题是出在哪里呢?谢谢,小弟感激不尽。
我整个程序如下:
#include <stdio.h>
#include <stdbool.h>
bool compare (char a[] , char b[]);
void find (void);
void fuzhi (char a[] , char b[]);
struct by
{
char keep[15];
};
struct by save[999];
struct shu
{
char repeat[15];
int number;
};
struct shu jieguo[999];
bool compare (char a[] , char b[])
{
int i = 0;
while (a[i] == b[i] && a[i] != '\0' && b[i] != '\0')
{
++i;
}
if (a[i] == '\0' && b[i] == '\0')
{
return true;
}
else
{
return false;
}
}
void find (void)
{
FILE *inputfirst;
int i,y,a,b,e,f = 0,g = 0;
char temp;
char temp1[10];
bool t = false;
printf ("请输入您要比较的文件名(如:test.txt):");
scanf ("%10s",temp1);
inputfirst = fopen (temp1,"r");
if (inputfirst == NULL)
{
printf ("没找到您输入的文件名,请重新输入!\n");
exit(1);
}
for (i = 0;temp != EOF; ++i)
{
for (y = 0;temp != '\n'; ++y)
{
temp = getc(inputfirst);
save[i].keep[y] = temp;
}
save[i].keep[y - 1] = '\0';
}
for (a = 0; a <= i; ++a)
{
b = 0 , e = 0;
while (b <= i)
{
t = compare (save[b].keep,save[a].keep);
if (t == true)
{
++e;
}
}
if (e > 1)
{
jieguo[f].number = e;
fuzhi (jieguo[f].repeat,save[a].keep);
++f;
}
}
if (f == 0)
{
printf ("您的文件中没有重复的内容!\n");
}
else
{
for (a = 0; a < f; ++a)
{
printf ("%s%80i",jieguo[a].repeat,jieguo[a].number);
}
}
}
void fuzhi (char a[] , char b[])
{
int i;
for (i = 0;b[i] != '\0'; ++i)
{
a[i] = b[i];
}
a[i] = '\0';
}
int main (void)
{
find();
return 0;
}