关于c语言中fscanf的读取的问题,求大佬们帮下

1.在使用fscanf读取文件中的数据时报错图片说明
2.具体代码中fscanf中输入列表中使用的是指针。
3.具体代码附上

#include "stdio.h"
#include "string.h"
void RecordOutPut(int (*studentScore)[9],char (*studentName)[10],int studentnumber);
int  menuChoose(int (*pstudentScore)[9],char (*pstudentName)[10],int studentNumber);
void inputMenu(int a);
void inputRecord(int (*pstudentScore)[9],char (*pstudentName)[10],int studentNumber);
void fgetScore(int (*pstudentScore)[9],char (*pstudentName)[10],int studentNumber);
void main()
{
    int studentNumber=30;
    int (*pstudentScore)[9];
    char (*pstudentName)[10];
    int menu=1;
    while(menu==1)
    {
        menu=menuChoose(pstudentScore,pstudentName,studentNumber);
    }

}
int menuChoose(int (*pstudentScore)[9],char (*pstudentName)[10],int studentNumber)
{
    int n=0;
    int i=0;
    int menuNumber=0;
    printf("Please Choose The Operation.\n");
    printf("1.Input record\n");
    printf("2.Caculate total and average score of course\n");
    printf("3.Sort in descending order by score\n");
    printf("4.Sort in ascending order by number\n");
    printf("5.Search by number\n");
    printf("6.Statistic analysis\n");
    printf("7.Lise record\n");
    printf("0.Exit\n");
    printf("please enter your choice:");
    scanf("%d",&menuNumber);
    switch(menuNumber)
    {
        case 0:
            return 0;
            break;
        case 1:
            inputRecord(pstudentScore,pstudentName,studentNumber);
            return 1;
            break;
        case 2:
            fgetScore(pstudentScore,pstudentName,studentNumber);
            for(n=0;n<studentNumber;n++)
            {
                printf("%10s",*(pstudentName+n));
                for(i=0;i<=8;i++)
                {
                printf("\n%d",*(*(pstudentScore+n)+i));
                }
            }
            return 1;
            break;
        case 3:
            return 1;
            break;
        case 4:
            return 1;
            break;
        case 5:
            return 1;
            break;
        case 6:
            return 1;
            break;
        case 7:
            return 1;
            break;
        default:
            return 0;
            break;
    }
}
void inputRecord(int (*pstudentScore)[9],char (*pstudentName)[10],int studentNumber)
{
    int studentScore[30][9];
    char studentName[30][10];
    int n=0;
    int j=0;
    int k=0;
    int i=0;
    pstudentScore=studentScore;
    pstudentName=studentName;
    printf("Please input the student's count:");
    scanf("%d",&studentNumber);
    printf("\n");
    for(n=0;n<studentNumber;n++)
    {
        printf("请输入第%d个学生的姓名:",n+1);
        scanf("%s",studentName[n]);
        //printf("%s",*(pstudentName+n));
        for(j=0;j<=6;j++)
        {
            printf("请输入第%d个学生的",n+1);
            inputMenu(j);
            printf("成绩:");
            scanf("%d",&studentScore[n][j]);
            printf("\n");
        }
        studentScore[n][7]=studentScore[n][0]+studentScore[n][1]+studentScore[n][2]+studentScore[n][3]+studentScore[n][5]+studentScore[n][4];
        studentScore[n][8]=(double)studentScore[n][7]/6;
    }
    /*for(n=0;n<studentNumber;n++)
    {
        for(j=0;j<=8;j++)
        {
            printf("%d",studentScore[n][j]);
        }
        printf("\n");
    }*/
    RecordOutPut(pstudentScore,pstudentName,studentNumber);
}
void RecordOutPut(int (*studentScore)[9],char (*studentName)[10],int studentnumber)
{
    int n=0;
    int i=0;
    int j=0;
    int *score;
    int *name;
    char FileNameM[10];
    FILE *studentRecordOutPut;
    for(n=0;n<=9;n++)
    {
        FileNameM[n]=' ';
    }
    for(n=0;n<studentnumber;n++)
    {
        printf("%10s\n",*(studentName+n));
    }
    /*for(n=0;n<studentnumber;n++)
    {
        printf("%s",*(studentName+n));
        for(i=0;i<=8;i++)
        {
         printf("\n%d",*(*(studentScore+n)+i));
        }
    }*/
    printf("Please input the name of u want keep these record:");
    scanf("%s",&FileNameM);
    studentRecordOutPut=fopen(FileNameM,"w+");
    fprintf(studentRecordOutPut,"姓名    数学 语文 英语 物理 化学 生物 学号 总分 平均分\n");
    for(n=0;n<studentnumber;n++)
    {
    fprintf(studentRecordOutPut,"%-7s",*(studentName+n));
        for(i=0;i<=8;i++)
        {
            fprintf(studentRecordOutPut,"%5d",*(*(studentScore+n)+i));
        }
    fprintf(studentRecordOutPut,"\n");
    }
    fclose(studentRecordOutPut);
}
void inputMenu(int a)
{
    switch(a)
    {
        case 0:
            printf("数学");
            break;
        case 1:
            printf("语文");
            break;
        case 2:
            printf("英语");
            break;
        case 3:
            printf("物理");
            break;
        case 4:
            printf("化学");
            break;
        case 5:
            printf("生物");
            break;
        case 6:
            printf("学号");
            break;
    }
}
void fgetScore(int (*pstudentScore)[9],char (*pstudentName)[10],int studentNumber)
{
    FILE *studentScoreRead;
    int n=0;
    int i=0;
    int j=0;
    int k=0;
    char fileAdress[100];
    scanf("%s",fileAdress);
    studentScoreRead=fopen(fileAdress,"a+");
    for(j=0,n=0;n<studentNumber;n++,j++)
    {
        fscanf(studentScoreRead,"%s",*(pstudentName+n));
        for(i=0;i<=8;i++)
        {
            fscanf(studentScoreRead,"%5d",*(*(pstudentScore+n)+i));
        }
    }
    fclose(studentScoreRead);
}
c
0

2个回答

希望能从输入的文件路径读取txt文件内的数据,但是到读取文件中内容时就会出错。。。
似乎是因为test中第一行的问题?
但是去掉第一行后仍旧出错
图片说明
test文件中内容如下这是现在的
图片说明
已解决

 void fgetScoreC()
{
    FILE *studentScoreRead;
    int n=0;
    int i=0;
    int j=0;
    int k=0;
    int studentNumber;
    int studentScore[30][9];
    char studentName[30][10];
    char fileNameInput[100];
    char elsec[100];
    printf("Please input the file u want open:");
    scanf("%s",fileNameInput);
    studentScoreRead=fopen(fileNameInput,"r");
    fgets(elsec,55,studentScoreRead);
    n=0;
    k=1;
    while(k==1)
    {
        if(feof(studentScoreRead))
        {
            k=-1;
        }
        else
        {
        fscanf(studentScoreRead,"%s",studentName[n]);
        //printf("\n%s",studentName[n]);
        i=0;
        while(i<=8)
        {
            fscanf(studentScoreRead,"%d",&studentScore[n][i]);
            i++;
        }
        n++;
        }

    }
    studentNumber=n-1;
    for(n=0;n<studentNumber;n++)
    {
        printf("%s",studentName[n]);
        for(i=0;i<=8;i++)
        {
            printf("%d ",studentScore[n][i]);
        }
        printf("\n");
    }










然后用指针指向就ok!

0

char (*pstudentName)[30]定义一个数组指针,该指针指向含30个元素的一维数组(数组中每个元素是char型)。你要的名字应该是char[]

1
qq_19983611
:D C: 已解决 谢谢
9 个月之前 回复
qq_19983611
:D C: 我这个是三十个元素每个元素是一个char数组
9 个月之前 回复
qq_19983611
:D C: 用char[]传入函数吗?
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言初学之fscanf()函数理解
c语言初学之fscanf的相关理解
c语言中格式化读写函数fscanf()和fprintf()
fscanf():从指定文件中按指定格式读入数据,并赋值给相应的变量 格式:fscanf(文件指针,格式字符串,输出列表) e.g. fscanf(fp,"%d",&i) fscanf(fp,"%d %d",&i,&j) 从文件指针fp指向的文件中按整形读取一个数据,并将这个值赋给变量i. fprintf():将一个变量按照指定的方式写入到指定的文件中. 格式:
C语言基础-fscanf函数使用示例
C语言,文件操作,fscanf()函数
C语言中的fscanf读取文本文件一行而不能读取行中数据的解决方法
在学习c语言的时候,我们可能会对fscanf的读取存在疑惑,这也是c语言的一个bug。在&quot;E:\\temp\\a.txt&quot;的a.txt的内容如下:张三,600李四,500王五,1200程序要解决的问题是:读取姓名后面的数字,并求和;程序的代码如下:#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#pragma warning (disable:49...
C语言:fscanf函数与fprintf函数——格式化读写函数
函数fscanf和函数sprintf是格式化读写文件函数,其功能与我们经常使用的scanf函数与printf函数类似。 两者区别:scanf函数和printf函数的读写对象分别是键盘和显示器;                   fscanf函数和fprintf函数的读写对象是磁盘文件; 1.函数fscanf的原型:int fscanf(FILE*stream,char*format,......
C语言fscanf函数读取结构化数据
int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) fscanf()分隔符是;空格、tab、回车,读取成功返回所读的字段数,读取失败或读取结束返回EOF。fscanf()是按照__format的格式读取字段, 如下面代码例子,%s%d%s表示一次读入2个字段,读完第
go Fscanf 在读取文件时出现的问题
先要明白Fscanf的工作原理 Fscanf在遇到\n才结束 遇到\r时就会把\r替换成0 这就有个问题,要注意自己的文本换行符是什么,在Windows下就是\r\n,在Linux,Mac下就是\n,也就是说这里有个坑, 代码在Linux和Mac下读取数据文件是正常的,在Windows下就会遇到各种行末尾有个0,网上办法用什么替换啊,用什么自定义Scan函数啊,太麻烦了,直接使用自带IDE...
c 文件读入读出 动态数组
文件读入读出FILE *fin,*fout; fin=fopen("data.in","rb"); fout=fopen("data.out","wb"); fscanf(fin,"%d",&n); fprintf(fout,"%d",n); fclose(fin); fclose(fclose); 一维动态数组int m; int *a=new int[m]; 二维动态数组int m,n,k; i
C语言函数--fscanf()、scanf()、sscanf()基本用法
fscanf()、scanf()、sscanf()都包含在&amp;lt;stdio.h&amp;gt;中 fscanf(): int fscanf(FILE *stream,const char *format,…); 从流stream读取格式化输入。 scanf(): int scanf(const char *format,…); 从标准输入stdin读取格式化输入。 sscanf(): int sscan...
fscanf函数,从.txt中一次性读取指定数量的数据
FILE*fp=NULL;  fp=fopen("LidarData.txt","r");//打开激光雷达数据         int  data[22];                     fscanf(fp,"%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,",&data[0],        
C语言的fgets和fread和fscanf的不同用法,有例子哦!
#include #include #include int main() { char str[100]; FILE *fp; if( (fp = fopen( "a" , "r" )) == NULL ) { printf("error!"); } else { /*while(!feof(fp)) { fgets( str , 100 , fp );
当fscanf()遇到空格怎么办?
当fscanf()遇到空格怎么办? 以下就是一个例子 #include <stdlib.h> #include <stdio.h> int main() { FILE *fpw=fopen&#40;"data1.txt","w"&#41;; if(fpw==NULL) { return 0; } char s[20]; gets(s); fprintf(fpw,"%s",s); fclose(fpw); FILE *fpr=fopen&#40;"data1.txt","r"&#41;; if(fpr==NULL) { return 0; } fscanf(fpr,"%s",s); puts(s); getchar(); fclose(fpr); return 0; } 输入: big baby 回车 输出 :big
关于C语言中进制问题以及简单的浅谈进制转化问题。
对于一般学习中,最常见的就是4种,二进制,八进制,十进制以及十六进制。在大一的C语言学习当中,学校粗略的说了一下这些,最后导致好多人无法流畅的进行进制之间的转化,以及使用。在大一接触单片机以后更加发进制之间转化的一些规律等,现在来谈一下。 1.关于十进制与二进制之间的转化。 在这四种进制当中,最常用的就是十进制了,从我们开始学数学开始,一直用的就是十进制。二进制,就是0和1,这是机器能够读懂的
C语言中一些基本问题
一、小白在学习过程中有时会在程序中看到0u或是0ul等常量有后缀的情况,如果没接触到C语言常量后缀的话可能就有点疑惑~ 其中的u为unsigned,l为long,f为float           C语言中常量的默情况:整形默认为有符号int;浮点型默认为double;如果整形常量大小超出int,默认自然就为long int;如果需要无符号整形常量的话就可以在常量后面加u或是U,如0u或是0U...
如何实现结构体和文件之间实现读写--fopen文件流读写(fscanf/fprintf)
如何实现结构体和文件之间实现读写--fopen文件流读写(fscanf/fprintf) 目的: #1. 把结构体数据写入文件; #2. 把文件中数据到处到结构体; 用到的函数: FILE *fopen(const char *path, const char *mode); int fscanf(FILE *stream, const char *format, ..
有关C语言的精度问题
      再精准的仪器都会有误差,包括计算机,所以在写程序时要考虑到误差值。通常会在程序开始部分规定一个精度EPS,计算结果在这个误差值正负范围内,则为正确,若超出这个范围,则错误。下面就是一个需要考虑误差的程序例子:求一元二次方程ax^2+bx+c=0的解(分相等实根和不等实根情况)。(1)a=0,则x1=x2=(-c)/b;(2)a不等于0:b^2-4ac&amp;gt;0;有两个不等的实根    ...
C语言中一些有关于字符串的库函数 ( 源函数 )
strlen  计算字符串大小 // 计数器方法 int my_strlen(const char * str) { int count = 0; while(*str) { count++; str++; } ...
C语言中关于插入法排序的源代码
C语言中关于插入法排序的源代码; C语言中关于插入法排序的源代码。
c++ 读文件,fscanf结尾问题
使用fscanf()判断文件结尾 先看这样一段代码: #include #include int main() {     char ch;     FILE *fp = fopen("in.txt", "r");     while (!feof(fp))     {         fscanf(fp, "%c", &ch);         
求质数问题的c语言实现
c语言中求质数问题的实现代码,可直接编译执行
C语言中变量类型的分析总结
变量按作用范围来分可以分为局部变量和全局变量 变量 Discription 局部变量 在函数内部定义的变量,函数内部的形参。作用范围在函数内部。 全局变量 在所有函数的外部的申明,称为全局变量 注意,全局变量不属于某个函数,而是整个源文件。如果外部文件要进行调用(比如两个不同的源文件),需要使用extern进行修饰。 变量按存储类别分为静态存储、动态存储 存储方...
C语言中的二维数组问题
在《C和指针》Page157中讲到多维数组(例matrix[3][10])时,*(matrix+1)+5是一个指向matrix[1][6]的指针,等同于matrix[1]+5.而*(*(matrix+1)+5)就是matrix[1][6]. 在这里matrix表示一个指向若干整型元素数组的指针.      而《C陷阱与缺陷》的第三章-语义"陷阱",讲到指针与数组的关系时,作者提到"C语言只有一维
关于C语言feof()函数判断文件结尾的问题分析
相信很多C语言初学者都遇到过这种情况: 使用 while(!feof(fp)) { fscanf(...); //或者 //fread(...) } 读文件时经常会重复读最后一段字符。 实际上这并非feof()函数的bug,只是我们不了解feof()函数的性质。 feof()的性质: 只有当文件位置指针指向文件末尾,再发生读/写操作,然后再调用feof()时,才会得到...
使用C语言获取字符串长度
#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt; int main(){ //strlen(字符数组名)计算字符串数组名 char text[50],connect[50]; int num; printf(&quot;输入一个字符串:\n&quot;); scanf(&quot;%s&quot;,&amp;amp;text); num = strlen(text);/...
C语言 文件操作 实例
关于C语言中常用函数的使用,包括:fgets, fputs, fgetc, fputc, fprintf, fscanf, fwrite, fread 其中有6个文件用于解释文件操作的基本功能
C语言-printf、fprintf、fopen、fclose函数的用法
printf()函数printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息。 函数的原型为: int printf(const char *format, …); 函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。 printf()函数的调用格式为: printf(“<格式化字符串>”, <参量表>); 格式化字符串包括两部分内容: 一部分是
C语言库函数C语言库函数
C语言中的库函数C语言中的库函数C语言中的库函数C语言中的库函数C语言中的库函数
c语言实现大小端判断和二进制模式写入各种数据到文件
#include #include #include //测试大小端模式 void test_endian() { uint32_t i=0x04030201; unsigned char* cp=(unsigned char*)&i; if(*cp==1) printf("little-endian\n"); else if(*cp==4)
C语言文件的随机读写
C语言文件的随机读写 文件顺序读写,即读写文件只能从头开始,依次读写各个数据。但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写。这种读写方式称为随机读写,也就是说从文件的任意位置开始读写。 实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。 文件定位函数rewind和fseek 移动文件内部位置指针的函数主要有两个,即 rewin...
C语言中的变量&命名规范
C语言中的变量            变量:顾名思义就是可以变化的量,他可以存任意类型的C语言中的数据。但是他跟常量最大的不同就是,变量可以任意修改!       变量的使用:只有一种方式:赋值的方式如:int a = 10; char c = 'a';   变量的使用注意:     变量左边申明什么类型,右边赋
C语言(35)最大素因子
  描述 GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0. 输入 有多组测试数据,每一行输入一个数字n.(0&amp;lt;n&amp;lt;=1000000) 输出 在接下来...
C语言中你必须知道的100个问题
来自于《你必须知道的495个C语言问题》 经过了总结1-使用typedef定义新的类型名,int16和int32,再根据实际机器选择int, short, long标准头文件 inttypes.h 已经帮你定义了int16_t,uint32_t等等2- C99中 long long至少64位3- 存储类型 extern的作用?extern对数据声明才有意义,对函数声明仅仅是告诉你该函数的定义可能在
C语言从txt文本中读取多行用逗号分隔的数据
例如数据为: 0.5712,0.45356,0.74399 0.58775,0.4721,0.77793 0.51964,0.42228,0.69693 将每一列的数据保存在一个double型数组中。 解决方案: 1.利用fscanf()函数:#include <stdio.h> #include<stdlib.h>int main() { FILE *fp = fopen("C
OC语言中类的三大特性及本质(一)
OC语言同C++,C#,java等其他面向对象语言一样,都有类的概念。其他语言通常以关键字class声明一个类,但是OC语言却是以@interface声明一个类。类的定义OC类声明以@interface开头,后面紧跟类名,以@end结束。声明如下:@interface classname //声明成员变量和方法 @endOC类实现以@implementation开头,后面紧跟类名,以@end结束。实
C语言中报数(1~3)问题(约瑟夫环问题)
题目描述:n个人围成一圈,顺序排号。从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位? 代码如下: #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; //报数函数 void count(int n) { int i, k, m; int *num; num = (int*)malloc(sizeof(...
关于C语言文件的读写
C语言文件的读写 字符读写 1、fputc()函数; 2、fgetc()函数 字符串读写 1、fputs()函数 2、fgets()函数 数据块读写 1、 fread()数据块读函数 2、fwrite()数据块写函数 格式化读写 1、fprintf()函数 2、fscanf()函数 C语言文件的读写 关于细节几部分,我就不仔细介绍了,首先,我只想说说关...
C语言中求正负余数
题目内容 : 在C语言中,如果被除数为负值,则对一个正数求余的时候,求出的余数也是一个负数。在某些场合下,我们需要求出它的正余数,例如:在C语言中有(-11)%5=-1,但是有时我们希望得到的余数不是-1,而是4。请编写程序计算(-11)%5的负余数和正余数。   以下为程序运行结果示例: negative: -1 positive: 4   输入格式:无 输出格式: 负余数的输...
c语言中的绝对值
加入嵌入式这个行业已经半年了,以前一直以为c语言中没有绝对值这个东西的,今天看了一份代码才发现,原来是自己孤陋寡闻了........ 头文件:math.h 函数名:abs(); 例如: abs(-1);其返回结果是1。 具体看下图。
C语言平方数(补充)
Problem Description 飞飞特别喜欢平方数,可是他数学并不好,你能帮他计算n与m之间所有平方数之和吗? 提示:若一个整数的开方还是整数,它就是平方数。例如:4、9、16、25是平方数。 Input  第一行 T 代表数据的组数。 接下来有 T 行,每行两个整数n,m (0 Output  输出一个整数,代表所求区间内平方数之和。
C语言中三目运算符的结合性问题
C语言中存在唯一的三目运算符