关于C语言中fscanf()函数如何读入文件中下一行的数据!!

我想读入如下文件
1, 7, 1
CC, CC, CC, CC, CC, CC, O1,

当读完第一行后,如何再读下一行?
#include<stdio.h>
#include<string.h>

int main()
{ int Comp_Name;
int Ring_Num;
int N_H_Num;

FILE * fp;
if((fp=fopen("inoutdata.txt","r"))== NULL)
{ printf("Cannot open file.\n");
exit(0);
}
fscanf(fp,"%d, %d, %d\n",&Comp_Name,&N_H_Num,&Ring_Num);
printf("%d, %d, %d\n",Comp_Name,N_H_Num,Ring_Num);

int Bond_Num;
Bond_Num=Ring_Num+N_H_Num-1;
printf("Bond_Num=%d",Bond_Num);

char * Non_H_atom[7];
fscanf(fp,"%s,",&Non_H_atom[0]);
int i;
for(i = 1;i<N_H_Num;i++)
{ fscanf(fp," %s,",&Non_H_atom[i]);
}

for(i = 0;i<N_H_Num;i++)
{ printf(" %s,",Non_H_atom[i]);
}
system("pause");
}
这样好像不行,运行不成功!!
高手指点!!

第1个回答  推荐于2016-08-05
错误
1.你的文件里的逗号是中文字符,
2.char * Non_H_atom[7];
这你只是定义了一个字串指针,没有分配空间,
如你要使用就要先分配空间给他,除了刚定义时可以直接赋值。
如char * Non_H_atom[7]={"aa","bb",....;}

改成
#include<stdio.h>
#include<string.h>

int main()
{ int Comp_Name;
int Ring_Num;
int N_H_Num;
int i;
FILE * fp;
int Bond_Num;
char *Non_H_atom[7];

if((fp=fopen("inoutdat.txt","r"))== NULL)
{ printf("Cannot open file.\n");
exit(0);
}
fscanf(fp,"%d,%d,%d",&Comp_Name,&N_H_Num,&Ring_Num);
printf("%d, %d, %d\n",Comp_Name,N_H_Num,Ring_Num);

Bond_Num=Ring_Num+N_H_Num-1;
printf("Bond_Num=%d\n",Bond_Num);

for(i = 0;i<N_H_Num;i++)
{
Non_H_atom[i]=(char *)malloc(5);
fscanf(fp,"%s,",Non_H_atom[i]);
}

for(i = 0;i<N_H_Num;i++)
{ printf("%s",Non_H_atom[i]);
free(Non_H_atom[i]);
}

fclose(fp);
system("pause");
}本回答被提问者采纳

C语言 fscanf语句读取文件时怎么换行?
用fscanf(infp,"%s%d%d%d",s,&a,&b,&c);读取时,"John"复制到s,98赋给a,99赋给b,70赋给c,最后的<CR>会保留在文件中,当下一个scanf()函数再行读入时,首先碰到<CR>,这个<CR>会被读出并丢弃,即使有多个白字符也同样被丢弃,直到读到有效数据。

C语言 格式读取 fscanf() 如何读取至末尾结束(txt)
fscanf是有返回值的。如果返回EOF,证明到达文件结尾 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围...

C语言用fscanf()函数如何读取文件全部内容?
void read_txt(const char* Input, const char* Output){ FILE *fin = fopen(Input, "rb");\/\/以二进制读入 FILE *fout = fopen(Output, "w");unsigned char ch1,ch2;while(fscanf(fin, "%c%c", &ch1,ch2) != EOF){\/\/直到文件结束 fprintf(fout, "%d%d", ch1,ch2);\/\/以10进...

c语言中的fscanf()
在C语言编程中,fscanf函数扮演着关键角色,它用于从输入流中读取数据。这个函数的一个重要特性是它能够根据特定格式(如以空格分隔)读取数据。当你使用类似`int ans = fscanf(fp, "%d %d", &a, &b);`这样的语句时,fscanf会尝试从文件指针fp指向的位置读取一个整数并将其存储在变量a中,接着再...

c语言中的fscanf()函数
fscanf是C语言中一个非常常用的函数,它用于从文件中读取格式化输入。这个函数可以读取不同类型的数据,如整数、浮点数、字符串等。其函数原型为:`int fscanf`。其中,stream指向要读取的文件,format是读取数据的格式字符串。2. fscanf函数的格式字符串 格式字符串指定了预期输入数据的格式。例如,%d表示...

C语言里fscanf是如何处理%c与%s的
fscanf和scanf一样,只是前者一般从文件中读数据,后者从输入缓冲区读数据。在scanf中,%c只读取一个字符,%s是读取一个字符串——这时会跳过前面的' '、'\\t'、'\\n'等广义空格直接接收字符,一个接一个地把接收到的字符依次赋给对应的数组元素,当再次遇到' '、'\\t'、'\\n'等广义空格时认为...

如何用C语言读取txt文档中最后一行数据
如果想自由地读取txt文档任意位置,就只能使用随机读写数据文件的方式来读与写的操作。因为C语言里的随机读写数据文件提供了 “文件位置标记”和定位的相关函数。例如:rewind函数使文件位置标记指向文件开头 fseek函数改变文件位置标记,其中该函数的原型为:fseek(文件类型指针,位移量,起始点);如果仅仅是想...

C语言中fscanf()的用法
功 能: 从一个流中执行格式化输入\\x0d\\x0a 用 法: int fscanf(FILE *stream, char *format,[argument...]);\\x0d\\x0a int fscanf(文件指针,格式字符串,输入列表);\\x0d\\x0a 返回值:整型,数值等于[argument...]的个数\\x0d\\x0a 程序例:\\x0d\\x0a #include \\x0d\\x...

fscanf函数
fscanf函数是C语言中用于从文件读取数据的函数。函数简介 fscanf函数是C标准库中的一个重要函数,用于从指定的文件中读取数据。它可以根据指定的格式字符串读取并存储数据到变量中。该函数返回一个整数值,表示成功读取的数据项数。如果到达文件末尾或发生其他错误,返回值会小于提供的变量数量。函数原型 fscan...

c语言:fscanf(fp,"%*[^\\n]")为什么可以跳过全部字符直到下一个...
scanf是格式输入函数,功能是在屏幕上输入指定的信息。简单的来说和printf相似却不相同。scanf调用格式: scanf("<格式化字符串>",<地址表>);如:include <stdio.h> int main(){ int a,b,c;printf(“input three data:\\n”);\/\/使用 scanf 之前先用 printf 提示输入。scanf("%d%d%d",&a,&...

相似回答