关于C语言中fscanf()函数如何读入文件中下一行的数据!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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.你的文件里的逗号是中文字符,
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 语言文件操作 (fscanffprintf 函数)
一、fscanf 函数
fscanf 遇到空格 , 回车 会断开 , fgets 遇到回车会断开 ;
fscanf 函数作用 : 根据数据格式 const char * format
, 从文件 FILE * stream
中 , 读取数据存储到 [argument...]
参数中 ;
fscanf 函数原型 :
int fscanf(FILE * stream, const char * format, [argument...]);
使用 fgets 从文件中获取数据 ( 用作对比参照 ) :
#include <stdio.h>
int main()
{
FILE *p = fopen("D:\\\\a.txt", "r");
while (!feof(p)){
char buffer[100] = {0};
fgets(buffer, sizeof(buffer), p);
printf("%s\\n", buffer);
}
// 关闭文件
fclose(p);
printf("Main End\\n");
return 0;
}
输出 :
13 + 5 = 18
使用 fscanf 函数从文件中获取数据 : 此处读取的数据格式是 “%s” , 遇到空格或回车 , 就当做一个新的字符串进行处理 ;
#include <stdio.h>
int main()
{
FILE *p = fopen("D:\\\\a.txt", "r");
while (!feof(p)){
char buffer[100] = {0};
//fgets(buffer, sizeof(buffer), p);
// fscanf 与 scanf 用法一致
// fscanf 是从文件中读取 , scanf 是从命令行读取
fscanf(p, "%s", buffer);
printf("%s\\n", buffer);
}
// 关闭文件
fclose(p);
printf("Main End\\n");
return 0;
}
执行结果 : fscanf 函数将 空格 也当做了换行 ;
输出
13
+
5
=
18
Main End
读取指定格式的字符串 : 读取 "%d + %d = %d"
格式的字符串 , 将其中的整型变量 , 输出到 a, b, c 变量中 ;
#include <stdio.h>
int main()
{
FILE *p = fopen("D:\\\\a.txt", "r");
while (!feof(p)){
char buffer[100] = {0};
//fgets(buffer, sizeof(buffer), p);
int a, b, c;
// fscanf 与 scanf 用法一致
// fscanf 是从文件中读取 , scanf 是从命令行读取
fscanf(p, "%d + %d = %d", &a, &b, &c);
printf("a=%d , b=%d , c=%d\\n", a, b, c);
}
// 关闭文件
fclose(p);
printf("Main End\\n");
return 0;
}
执行结果 :
a=13 , b=5 , c=18
Main End
二、fprintf 函数
fprintf 函数用于向文件中输出格式化文本 ;
该函数类似于 printf 函数 , 只是 printf 函数将文本打印到命令行窗口中 , fprintf 将文本输出到文件中 ;
fprintf 函数原型 :
int fprintf (FILE* stream, const char*format, [argument])
FILE* stream 参数 : 文件指针 ;
const char*format 参数 : 要写入的文本格式 ;
[argument] 参数 : 文本格式对应的若干参数 , 这是个可变参数 ;
代码示例 ( 输出固定文本 ) : 与 fputs 类似 ;
#include <stdio.h>
int main()
{
FILE *p = fopen("D:\\\\a.txt", "w");
char buffer[100] = "10 + 3 = 13";
// 输出文本到文件
fprintf(p, "%s\\n", buffer);
// 关闭文件
fclose(p);
printf("Main End\\n");
return 0;
}
输出结果 : 将 10 + 3 = 13
固定文本输出到文件中 ;
代码示例 ( 输出格式化文本 ) :
#include <stdio.h>
int main()
{
FILE *p = fopen("D:\\\\a.txt", "w");
char buffer[100] = {0};
int a = 10, b = 3, c = 13;
// 格式化输出文本到文件
fprintf(p, "%d + %d = %d", a, b, c);
// 关闭文件
fclose(p);
printf("Main End\\n");
return 0;
}
输出文件内容 :
10 + 3 = 13
代码示例 ( 输出格式化文本 2 ) :
#include <stdio.h>
int main()
{
FILE *p = fopen("D:\\\\a.txt", "w");
char array[6] = {0, 1, 2, 3, 4, 5};
int i = 0;
for (i = 0; i < 6; i++){
// 输出格式化文本到文件
fprintf(p, "array[%d] = %d\\n", i, array[i]);
}
// 关闭文件
fclose(p);
printf("Main End\\n");
return 0;
}
输出结果 :
array[0] = 0
array[1] = 1
array[2] = 2
array[3] = 3
array[4] = 4
array[5] = 5
以上是关于关于C语言中fscanf()函数如何读入文件中下一行的数据!!的主要内容,如果未能解决你的问题,请参考以下文章