在C文件管理中,可以用1个字符串变量读取全名吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C文件管理中,可以用1个字符串变量读取全名吗?相关的知识,希望对你有一定的参考价值。

这个C程序如果使用单字名是可以的。其实我想做一个文本文件阅读器,可以把数据存储在结构变量中。然后我将总结他们参加了多少天。但是当我使用全名时,我面临一个问题。我的代码如下。

#include<stdio.h>

struct student
{
    int serial;
    int roll;
    char name[210];
    int day1,day2;
};

main()
{
    struct student read;
    FILE *fp2;

    fp2 = fopen("student_file.txt","r");
    if(fp2==NULL)
      printf("Not find");
    while(fscanf(fp2,"%d. %d %s %d %d",&read.serial,&read.roll,read.name,&read.day1,&read.day2)==5)
    {
      fprintf(stdout,"%d %d %s %d %d
",read.serial,read.roll,read.name,read.day1,read.day2);
    }
    fclose(fp2);
}

这个txt文件可以很容易地读取。

1. 123 Nahid 1 1
2. 465 Zahid 1 0
3. 789 Sahid 1 1
4. 159 Mahid 1 0

但是我想用fscanf和fprintf读取一个文本文件。

5. 889 Mark Joe 1 0
6. 669 M. J. Rakib 1 0

是否可以用C语言的文件管理来读取全名?如果我至少只能读取1行,这将对我有帮助。

答案

是的,这是可能的,如果一个名字不能包含数字(personalty,我从来没有看到一个名字有)只是修改了 fscanf 使用.NET的格式,在这里是为了不冒写出数组的风险,以防名字太长。

"%d. %d %209[^0-9] %d %d"

209在这里是为了避免在名字太长的情况下冒险写出数组。

因为额外的空格被保存在名称的结尾,你需要删除它们,你可以看到,如果我用这种格式打印。

"%d %d '%s' %d %d
"

生产

1 123 'Nahid ' 1 1
2 465 'Zahid ' 1 0
3 789 'Sahid ' 1 1
4 159 'Mahid ' 1 0
5 889 'Mark Joe ' 1 0
6 669 'M. J. Rakib ' 1 0

在你的代码中警告,如果你不能打开文件,你将会执行 while 便叫 fscanf 然后 fclose 在NULL上有一个未定义的行为

以上是关于在C文件管理中,可以用1个字符串变量读取全名吗?的主要内容,如果未能解决你的问题,请参考以下文章

用C读取matlab的mat文件

如何用C或c++写一段代码读取xsd结构生成一个XML文件,现在我有数据文件和XSD文件

C语言 结构体指针字符 二进制文件写入和读取

c语言提取文件的值

C语言fgets()函数(以指定长度读取文件中的字符,并存入字符数组变量中)

关于c++文件流读入和写入的问题