C语言,读取txt文件,内容为零

FILE *fp_read;
fp_read = fopen( "atom_guiyi.txt", "r" );//读取现有原子库的文件

float ****ku_final;
ku_final = ( float **** )malloc( nric * sizeof( float *** ) );
for( i = 0; i < nric; i++ )
{
    ku_final[ i ] = ( float *** )malloc( noff * sizeof( float ** ) );
    for( j =0; j < noff; j++ )
    {
        ku_final[i][j] = ( float ** )malloc( n_phase * sizeof( float * ) );
        for( z = 0; z < n_phase; z++ )
        {
            ku_final[i][j][z] = ( float * )malloc( length_ricker * sizeof( float ) );
            for( n = 0; n < length_ricker; n++ )
            { 
                ku_final[i][j][z][n] = 0.f;
            }
        }
    }
}   



FILE *fp_atom;
fp_atom = fopen( "dictionary.txt", "w" );//将读取的原子库写入到文本文件,证明读取的正确

for( iric = 0; iric < nric; iric++ )//频率
{
    ifre = iric * dfre + sfre; //第 i 个频率
    for( ioff = 0; ioff < noff; ioff++ )//偏移 
    {
        for( i_phase = 0; i_phase < n_phase; i_phase++ )//相位
        {
            phase = i_phase * d_phase + s_phase;
            for( n = 0; n < length_ricker ; n++ )
            {
                if( fp_read == NULL )
                    printf( "cannot open");
                else
                {
                    fscanf( fp_read, "%*d%*d%*d%*f%.16f", &ku_final[ iric ][ ioff ][ i_phase ][ n ] );
                    fprintf( fp_atom, "%d\t%d\t%d\t%f\t%.16f\n", ifre, ioff, phase, n * dt, ku_final[ iric ][ ioff ][ i_phase ][ n ] );
                }
            }
        }
    }
}
fclose( fp_read );
fclose( fp_atom );


atom_guiyi.txt文件的数据是五列,但是最后读出来最后一列是零,我想知道是怎么一回事?
![图片说明](https://img-ask.csdn.net/upload/201705/15/1494834908_794700.png)
c

1个回答

很简单,格式化输入的字符串不能用"%.16f",正确格式是%[数字][hl][转换字符],数字在这里表示的是读取内容的长度(不是浮点精度)。参考K&R C B1.3节

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言实现txt文件读取

VC编译器下c语言没有办法打开TXT文件。代码如下:#include <stdio.h> #include<stdlib.h> void main() { FILE *fp; if((fp=fopen("C:\Users\Administrator\Desktop\ad.txt","r"))==NULL) { printf("cannot open the file!"); exit(0); } else printf("ok"); fclose(fp); }

c语言空txt文件读出乱码

新建的空的txt文件,读取telephone.txt到链表,显示所有信息时读出的是一堆乱码,但是txt文件里没有存放任何数据。 /*读取telephone.txt文件中的内容创建学生链表*/ ID* create() { ID *head; ID *p1,*p2; p2 = (ID*)malloc(LENTEL); head = p2; FILE *fp; if((fp = fopen("telephone.txt","r")) == NULL) { printf("联系人文件打开错误,请将telephone.txt放置与程序同一目录下!\n"); exit(0); } while(!feof(fp)) { p1 = (ID*)malloc(LENTEL); fscanf(fp,"%s%s%s%s\n",p1->name,p1->tele,p1->style,p1->mail); p1->next = NULL; p2->next = p1; p2 = p1; } fclose(fp); return head; } //显示所有联系人 void Print_Inquire_All() { void menu_print_out(); ID *p1 = id->next; menu_print_out(); printf("姓名 电话 分类 邮箱\n"); while (p1!=NULL) { printf("%s\t%s\t%s\t%s\n",p1->name,p1->tele,p1->style,p1->mail); p1 = p1->next; } system("pause"); }

C语言fscanf读取外部文件的问题

``` #include<stdio.h> #include <string.h> #include <stdlib.h> #define num 15 struct student{ char id[10]; char name[10]; char money[10]; char number[10]; }; int main() { FILE *data; int i=0,j; struct student name1[num]; if((data=fopen("account_in.txt","r"))==NULL){ printf("Can not open file\n"); return 0; } while(!feof(data)){ fscanf(data,"%s;%s;%s;%s\n",name1[i].id,name1[i].name,name1[i].money,name1[i].number); printf("a = %s\n",name1[i].name); i++; } fclose(data); for(j=0;j<i;j++){ printf("%s;%s;%s;%s\n",name1[j].id,name1[j].name,name1[j].money,name1[j].number); } return 0; } ``` account_in.txt内容为: ``` abcd1;33dd;ggg;rrr aaa;sd;s;d ``` 问题就是 fscanf(data,"%s;%s;%s;%s\n",name1[i].id,name1[i].name,name1[i].money,name1[i].number); 这一句会贪婪匹配,最后输出不了正确的结果, 除了用%[^;];%[^;];%[^;];%s\n这个,还有什么方法解决吗? C语言不能用?禁止贪婪匹配吗。比如%[?s]好像不能编译。

关于c语言读取文件信息到链表,怎么操作?

问题:在读取文件数据到链表时好像出错了,除了"w+"的打开方式会让打印函数在程序运行,其他的打开方式在程序运行后不显示。![图片说明](https://img-ask.csdn.net/upload/201903/16/1552703248_859387.png) ``` #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<malloc.h> struct stu { int id; int age; char name[10]; int score; struct stu *next; }; void printf_stu(struct stu * head)//打印函数 { struct stu *p = head; printf("学生成绩\n"); printf("%-2s %-2s\n", "学号", "成绩"); while (p != NULL) { printf("%d %d\n", p->id, p->score); p = p->next; } } struct stu * create(int n) {//输入链表函数 int i; struct stu *head = NULL, *p, *q = NULL; for (i = 1; i <= n; i++) { if ((p = (struct stu *)malloc(sizeof(struct stu))) == NULL) { printf("不能分配!"); exit(0); } p->next = NULL; printf("第%d个学生的信息:", i); scanf("%d%d", &p->id, &p->score); if (i == 1) head = p; else q->next = p; q = p; } return head; } void open_in(struct stu *head) {//输入文件函数1 FILE *fp; struct stu *p = head; fp = fopen("c://学生信息表.txt", "w"); fprintf(fp, "%s %s\n", "学号", "成绩"); while (p != NULL) { fprintf(fp, "%d %d\n", p->id, p->score); p = p->next; } fclose(fp); } void open_inpp(struct stu *head) {//输入文件函数2 FILE *fp; struct stu *p = head; fp = fopen("c://学生信息表.txt", "a+"); fprintf(fp, "%s %s\n", "学号", "成绩"); while (p != NULL) { fprintf(fp, "4%d 4%d\n", p->id, p->score); p = p->next; } fclose(fp); } struct stu *createlink()//读取文件数据函数 { struct stu *head = (struct stu *)malloc(sizeof(struct stu)); int t, y; struct stu *p; struct stu *q; FILE * fp; p = q = head; fp = fopen("c://学生信息表.txt", "r"); while (fscanf(fp, "%d %d\n", &t, &y) != EOF) { q = (struct stu*)malloc(sizeof(struct stu)); q->id = t; q->score = y; p->next = q; p = q; } p->next = NULL; head = p; return head; } void main() { int n, i,sel; struct stu *head = NULL,*p; for (i = 1; i > 0; i++) { printf("1-输入学生数据 2-添加学生数据\n"); printf("3-打印学生数据"); printf("请输入选择(1-3)\n"); scanf("%d", &sel); switch (sel) { case 3: head = createlink(); printf_stu(head); break; case 2: open_inpp(head); break; case 1: printf("输入n:"); scanf("%d", &n); head = create(n); open_in(head); break; } printf("1-回到上一页 2-结束\n"); scanf("%d", &sel); if (sel > 1) break; } system("pause"); } ```

C语言,怎么实现从一个txt文件中读取一个int数字后输出,再读取文件中下一个int型数字?

假如txt文件内容为: 10,20,0..... 怎么实现读取10之后输出,再读取20输出,再读取0输出....直到文件结束?

C语言有关txt文件读取的问题,小白求问

#include<stdio.h> #include<stdlib.h> #include<string.h> struct StuInfo { long id[20]; char name[20]; char sex; long num[20]; float score; }stu[50]; void Load() { int i; struct StuInfo stu[50]; FILE*fp; fp = fopen("StuInfo1.txt", "r"); if ((fp = fopen("StuInfo1.txt", "r")) == NULL) { printf("The file can't be opened.\n"); return 0; } for (i = 0; !feof(fp); i++) { fscanf(fp,"%d%s%s%d%f", stu[i].id, stu[i].name, stu[i].sex, stu[i].num, stu[i].score); printf("%d%s%s%d%f", stu[i].id, stu[i].name, stu[i].sex, stu[i].num, stu[i].score); } fclose(fp); student = i; return stu; } int main() { Load(); } txt文件是50行形如:3 man male 12345678903 9.7000 完全运行不了。求调教

C语言文件的读取读不到第一行

最近在家又开始看一看C 结果发现文件这块不太熟练 用的时候发现使用文件读取txt里的内容时读不到第一行的内容 感到有些疑惑 我用的是devcpp 希望有老哥指点一二 ``` #include<iostream> #include<cstring> using namespace std; int block_num=0; int page_num=0; int river[20]={0}; void read_data() { FILE *fp; fp=fopen("page.txt","rt"); if(fp==NULL) { printf("error!\n"); exit(0); } char buffer[100]; fgets(buffer,100,fp); fscanf(fp,"%d%d",&block_num,&page_num); /*do { fscanf(fp,"%d",&block_num); fscanf(fp,"%d",&page_num); for(int i = 0;i<page_num;i++) { fscanf(fp,"%d",&river[i]); } }while(!feof(fp));*/ cout<<"block_num is "<<block_num<<"page_num is "<<page_num<<endl; /* for(int i=0;i<page_num;i++) cout<<river[i]<<" "<<endl;*/ } int main() { read_data(); } ```

关于C语言文件读取和写入

我写一个贪吃蛇的代码,最后要把分数写入一个文件中,然后输出为排行榜。 原来的txt文件里面是10个0(每个0一行),然后第一次游戏结束后,排行榜是第一名是这次的分数,其他全是0。 然后在进行下一次游戏,结束后是排行榜第一的是这次游戏的分数,其他的全是0,第一游戏的分数不见了。 ``` void Rankinglist(){ int m,n,i; FILE*fp1,*fp2; scores[10]=score; fp1=fopen("E:\\1.txt","r"); for(i=0;i<10;i++) fscanf(fp1,"%5.0f",&scores[i]); fclose(fp1); for(m=0;m<=9;m++){ for(n=m+1;n<=10;n++){ if(scores[m]<scores[n]){ scores[m]=scores[m]+scores[n]; scores[n]=scores[m]-scores[n]; scores[m]=scores[m]-scores[n]; } } } if(score!=scores[10]){ Position(60,10); printf("您的成绩登上了排行榜!"); fp2=fopen("E:\\1.txt","w"); for(i=0;i<10;i++){ fprintf(fp2,"%5.0f",scores[i]); } fclose(fp2); } Position(60,12); printf("排行榜"); for(i=0;i<10;i++){ Position(60,13+i); printf("第%d名:%5.0f分",i+1,scores[i]); } } ``` 求大神帮助。

txt文件信息读不进去 c语言

``` #include <stdio.h> #include <stdlib.h> #include<string.h> #include <Windows.h> #define MAXN 10000 #define max 10 #define p 23 int Work(); int Delete(); void insert(int adr); void Number(int key); void Departure(char temp[]); void Terminal(char temp[]); void Start(float temp); void Arrival(float temp); void FileOutput(); void Output(int adr); int hashlen = 0; typedef struct { char departure[6]; char terminal[6]; float start; float arrive; int num; float date; }flight; flight line; typedef struct { flight data; int cnt; }Hash; Hash ha[MAXN]; int main() { Work(); FileOutput(); return 0; } int Work() { while (1) { printf("********欢迎使用航班信息查询和检索系统********\n"); printf("1.清屏\t\n"); printf("2.航班号\t3.起点站\t\n"); printf("4.终点站\t5.起飞时间\t\n"); printf("6.到达时间\t7.退出系统\t\n"); printf("**********************************************\n"); printf("请选择将要使用的功能\n"); int t, temp; char temp2[5]; float temp3; scanf("%d", &t); switch (t) { case 1:Delete(); break; case 2: { printf("请输入航班号"); scanf("%d", &temp); Number(temp); break; } case 3: { printf("请输入起点站"); getchar(); gets_s(temp2); Departure(temp2); break; } case 4: { printf("请输入终点站"); getchar(); gets_s(temp2); Terminal(temp2); break; } case 5: { printf("请输入起飞时间"); scanf("%f", &temp3); Start(temp3); break; } case 6: { printf("请输入到达时间"); scanf("%f", &temp3); Arrival(temp3); break; } case 7: { exit(0); break; } } } } int Delete() { system("cls"); return 0; } void Number(int key) { int i=0, adr; int k = key; adr = k % p; insert(adr); if (ha[adr].data.num == key) { Output(adr);//在屏幕上显示 } else printf( "对不起,查无此航班!\n" ); } void Departure(char temp[]) { int i=0, flag = 0; for (i = 0; i < MAXN; ++i)//顺序查找 { if (flag) break; else if (strcmp(ha[i].data.departure,temp)==0) { Output(i); flag = 1;//标记是否查询到相关信息 } } if (!flag) printf( "对不起,查无此航班!\n" ); } void Terminal(char temp[]) { int i, flag = 0; for (i = 0; i < MAXN; ++i) { if (flag) break; else if (strcmp(ha[i].data.terminal,temp)== 0) { Output(i); flag = 1; } } if (!flag) printf("对不起,查无此航班!\n"); } void Start(float temp) { int i, flag = 0; i = temp / p; if (ha[i].data.start==temp) { Output(i); flag = 1; } if (!flag) printf( "对不起,查无此航班!\n" ); } void Arrival(float temp) { int i, flag = 0; i = temp / p; if (ha[i].data.arrive==temp) { Output(i); flag = 1; } if (!flag) printf ( "对不起,查无此航班!" ); } void Output(int adr) { printf("航班号\t起点站\t到达站\t班期\t起飞时间\t到达时间\t\n"); printf("%d\t%s\t%s\t%.2f\t",ha[adr].data.num , ha[adr].data.departure ,ha[adr].data.terminal,ha[adr].data.date ); printf("%.2f\t%.2f\t",ha[adr].data.start , ha[adr].data.arrive ); printf("\n"); } void FileOutput() { FILE* fp; fp= fopen("data.txt", "a+"); while (!feof(fp)) { fscanf(fp, "%d,%s,%s,%f,%f,%f", &line.num, line.departure, line.terminal, &line.start,&line.arrive, &line.date); } fclose(fp); } void insert(int adr) { ha[adr].data.num = line.num; ha[adr].data.start = line.start; strcpy(ha[adr].data.terminal, line.terminal); ha[adr].data.arrive = line.arrive; strcpy(ha[adr].data.departure, line.departure); } ``` ![图片说明](https://img-ask.csdn.net/upload/201905/17/1558107664_730495.png)

C语言中,如何将读取的16进制txt文件转化为10进制数组?

我读取到的的16进制数 0, 0, 6b6, 6a5, 695, 685, 67e, 663, 662, 652, 648, 640, 62e, 628, 616, 612, 604, 5f7, 5ed, 5df,是这样的600个数据,我写的代码如下,可为什么转化的是错的,请大神们帮忙看一下。 #include<stdio.h> #include <ctype.h> #include<stdlib.h> #include <string.h> #include<math.h> #define N 600 int main() { char szTest[1000] = {0}; int len = 0; FILE *fp = fopen("data25.txt", "r"); if(NULL == fp) { printf("failed to open dos.txt\n"); return 1; } while(!feof(fp)) { memset(szTest, 0, sizeof(szTest)); fgets(szTest, sizeof(szTest) - 1, fp); // 包含了\n int t=strlen(szTest); long sum=0; for(int i=0;i<t;i++){ if(szTest[i]>='a' && szTest[i]<='z') szTest[i]=int(szTest[i]-'a')+10+'0'; sum+=((szTest[i]-'0')*(pow(16,t-1-i))); sum1[]=sum; } printf("%ld\n",sum); } fclose(fp); printf("\n"); return 0; } /*unsigned convert(char szTest[]) { unsigned i,num = 0; for(i = 0;szTest[i];++i) { szTest[i] = toupper(szTest[i]); //* 小写字母转换成大写,其他字符不变 * if(isalpha(szTest[i])) num += 16 * num + szTest[i] - 'A'; else num += 16 * num + szTest[i] - '0'; } return num; } */

关于C语言按行读取文件,读取其中数字,挨个转换成doube类型,存入数组

int main() { FILE *fp; char buffer[50]; char filename[50]; int bufferLen; int i; int j = 0; char c; double c_number[50]; printf("Input file name: "); scanf("%s", filename); if((fp = fopen(filename, "rb")) == NULL) { return -1; } while(fgets(buffer, 50, fp)) { for(i = 0; i < 50; i++) { c = buffer[i]; if(c != ' ' && c != '\n' && c != '\r') //这里过滤,读取数字,文件有符号,空格什么的 { c_number[j] = (double)atof(c); //这里想挨个转换double没有成功 //sscanf(c, "%lf", c_number[j]); j++; } } } fclose(fp);

c语言文件读取汉字及汉字编码的问题

先贴程序 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> using namespace std; int main(void) { char ch; FILE *f; int i = 0; int count = 0; f = fopen("test.txt", "r+"); while ((ch = getc(f)) != EOF) { fseek(f, i, SEEK_SET); putc(~ch, f); i++; fseek(f, i, SEEK_SET); count++; } fclose(f); printf("文件操作已经完成\n"); printf("共处理%d个字节\n", count); printf("按任意键结束程序\n"); getchar(); return 0; } 该程序实现的就是对文件内的字符进行取反,就是简单的加密,再取反一次就变回原样了,也就是解密 在对汉字进行操作的时候,我进行了一些字的实验,目前仅发现了一个王字,在取反后取反回去不能变成王字,我加了查看字符格式的代码,发现 王 这个字在进行第一次字符操作时候,被分解为三个字节!!!然后再操作,就变成了四个!进行一次加一次,但是其他的汉字目前没发现错误,不知道是怎么回事,难道王字的编码就是三个字节吗? 求大家解答一下,我是新人没有一个c币。。。如果以后我得到了,就追加给你,谢谢啦

求帮助!C语言 图 邻接表文件怎么读取

结构体是这个: #define MAXSIZE 11 typedef struct node { int dizhi; int weiquan; struct node *next; }NODE,NN[MAXSIZE]; typedef struct { int NO; char name[50]; char xingxi[500]; NODE *head; }JieDian; typedef struct { JieDian jiedian[MAXSIZE]; int ding; int bian; }TU; ```我的代码 TU duqu() //文件读取 { TU *g; g=(TU *)malloc(sizeof(TU)); g->bian=0; g->ding=0; JieDian *p; node *q,*t; FILE *fp; fp=fopen("tu.txt","rt"); if(fp==NULL) printf("没能成功打开文件!(文件不存在)\n"); else { while(!feof(fp)) { q=(node *)malloc(sizeof(node)); p=(JieDian *)malloc(sizeof(JieDian)); fscanf(fp,"%d %s:%s",&p->NO,p->name,p->xingxi); t=q=g->jiedian[g->ding].head; g->ding++; do { fscanf(fp,"->%d(%dkm) ",&q->dizhi,&q->weiquan); t=q; q=q->next; g->bian++; }while(q!=NULL); t->next=NULL; } } printf("\t\t文件中已有%d个顶点,%d条边\n",g->ding,g->bian); return (*g); fclose(fp); } ```

C语言文件操作的指针问题

C语言文件操作 fseek(fp,0,SEEK_SET); File *k=fp; fseek(fp,0,SEEK_END); 为什么k=fp啊 我明明把指向文件头指针的地址赋予了k, 然后用文件操作,使fp从指向它这个文件头变成了指向文件尾。

怎样解决C语言TXT文本输入数据时的空格问题?

**题目如下:** 1到40,一共四十个数,输入时一行不超过12个数,不超过10行,筛选出现一次的数字,出现两次的数字,三次及三次以上的数字,出现零次的数字,要求用TXT文本输入,输出。 **遇到的问题:**输入数据后,发现结果错误。仔细查找发现,每行数据后会发现几个空格,![图片说明](https://img-ask.csdn.net/upload/201501/13/1421143508_225855.png),导致了只有第一行数据能够读入。笔者试过多次,发现貌似只有这一种空格形式会对结果造成影响,其他的情况,添加很多空格也不会有事。笔者咨询前辈,说可能由于中文或者英文状态下的原因,笔者试过两种状态下输入原数据的空格,发现均输出错误结果。现在比较迷惑,不知如何改进(其实用基本能用了),还请各位大神帮帮忙,也希望大家能对我的算法提出改进意见! **代码如下:** #include<stdio.h> #include<stdlib.h> #define S 120 #define T 40 #define I 1 int main() { FILE*fp1; FILE*fp2=fopen("output.txt","w"); int num1[S],num2[T],num3[T],num4[T],num5[T],num6[T],i,j=0,k=0,a=0,b=0,c=0,d=0,m,n; if((fp1=fopen("input.txt","r"))==NULL) { printf("无法打开文件\n"); exit(0); } for(i=I;i<=T;i++) num2[j++]=i;//将1至40赋给num2数组各元素 for(i=0;i<S;i++) fscanf(fp1,"%d",&num1[i]);//从文件中读出120个的数据,并存入num1数组 fclose(fp1); for(i=0;i<T;i++) { for(j=0;j<S;j++) if(num1[j]==num2[i])k++;//比较 if(k==0) num3[a++]=num2[i]; else if(k==1) num4[b++]=num2[i]; else if(k==2) num5[c++]=num2[i]; else if(k>3||k==3) num6[d++]=num2[i]; k=0; } fprintf(fp2,"出现过零次的数字是:"); for(m=0;m<a;m++) fprintf(fp2,"%3d",num3[m]); fprintf(fp2,"\n"); fprintf(fp2,"出现过一次的数字是:"); for(m=0;m<b;m++) fprintf(fp2,"%3d",num4[m]); fprintf(fp2,"\n"); fprintf(fp2,"出现过两次的数字是:"); for(m=0;m<c;m++) fprintf(fp2,"%3d",num5[m]); fprintf(fp2,"\n"); fprintf(fp2,"出现过三次或三次以上的数字是:"); for(m=0;m<d;m++) fprintf(fp2,"%3d",num6[m]); fprintf(fp2,"\n"); fclose(fp2); return 0; }

从txt文件中读取数据存入到链表,即使文件没有内容也会存上数字和乱码

代码如下: ``` contacts* read(char* filename)//把文件读入链表 { FILE* fp; if ((fp = fopen("people.txt","r")) == NULL)//以可读写方式打开文件,如果没有则建立一个 { printf ("文件打开失败!\n"); exit (1); } contacts *head, *q, *p, *h; head = NULL; p = (contacts*)malloc(sizeof(contacts)); if(NULL == p) { printf("内存分配错误"); exit(1); } q = p; //开始时,p和q均指向第1个结点 while (!feof(fp))//创建链表, 并把文件内容输入 { n++; if (n == 1) { head = p; } else { q->next = p; } q = p;//q是最后一个结点 p = (contacts*)malloc(sizeof(contacts)); fscanf(fp,"%d %s %s",&p->no,&p->name,&p->sex); /*int i=0; for(i=0;i<8;i++) { fscanf(fp,"%s",&p->phonenumber[i]); } fscanf(fp,"%s %d %d %d",&p->address,&p->byear,&p->bmonth,&p->bday);*/ }; q->next = NULL;//输入完毕后,q->next为NULL h = head; fclose(fp); return h; } void browse(contacts* head)//显示程序中所有记录的信息。 { while(head)//当head不为空的时候 { printf("\n==================================\ \n序号:%d\ \n姓名:%s 性别:%s",head->no,head->name,head->sex); /*printf("\n电话号码:\n"); int i; for(i=0; i<8; i++) { if(strlen(head->phonenumber[i]) == 0) { continue; } else { printf("%s\n",head->phonenumber[i]); } } printf("住址:%s ",head->address); printf("生日:%d年%d月%d日",head->byear,head->bmonth,head->bday);*/ printf("\n==================================\n"); head = head->next; } } ``` 运行结果 ![图片说明](https://img-ask.csdn.net/upload/201903/02/1551542218_627768.jpg) 为啥会这样。

C语言 文件读写fscanf 不能读取文件第一行

我在做USACO的训练题 按照要求写了个读文件的程序,但是出了一点我不能理解的bug 希望老师指点指点 程序: ``` int main () { char comet[6]; char group[6]; FILE *input; input=fopen ("ride.in", "r"); fscanf (input, "%s\n%s", comet, group ); \\fscanf (input, "%s%s", comet, group ); 都试过结果是一样的 //test input puts ("\ntest input"); printf ("%s\n%s\n", comet, group ); printf ("%c\n%c\n", comet[0], group[0] ); return 0; } ``` ride.in 文件内容: ``` COMETQ HVNGAT ``` 编译后的输出却是: ``` HVNGAT H ```

c语言用feof判断文件结尾,使用fscanf读取内容,最后一个词为什么被多读了一次。

``` fin = fopen("input.txt", "r"); palindromes = fopen("palindromes.txt", "w"); char in1[100]; int b = 0; while(!feof(fin)) { fscanf(fin, "%s", in1); printf("%s\n", in1); // check b = ifpalindromes(in1); if(b) { fprintf(palindromes, "%s\r\n", in1); } } ``` 这个是input文件 ![图片说明](https://img-ask.csdn.net/upload/201901/19/1547830880_583603.jpg) 下面是生成的palindromes文件 ![图片说明](https://img-ask.csdn.net/upload/201901/19/1547830920_9527.jpg) printf检查的结果 ![图片说明](https://img-ask.csdn.net/upload/201901/19/1547830966_878295.jpg)

关于c语言从文件中读取学生信息,处理并打印

![图片说明](https://img-ask.csdn.net/upload/201712/07/1512617928_774992.png) b) 建议函数流程: i. 打开数据文件,失败返回-1; ii. 从头到尾扫描数据文件(即预读一遍)获得学生人数; iii. 根据学生人数,利用malloc和sizeof等函数或运算符为struct student** pStudents分配内存; iv. 利用rewind函数,定位到文件头; v. 读取数据文件,并把每一条记录通过数组下标法或指针法保存到结构体数组pStudents中; vi. 关闭文件; vii. 返回学生人数。 c) 数据文件格式说明: 一行一条学生信息的记录,不同属性用空格隔开,输入数据中无总成绩记录,例如: 张三 通信 89 93 95 李四 网络 88 91 94 王五 物联网 71 94 88 3. 编写统计函数: a) 函数定义void Count(struct student pStudents[], int num)。输入参数分别为保存学生的结构体数组和学生人数。 b) 功能为:统计所有学生的总成绩和每个专业(假定一共三个专业:通信,网络,物联网)的平均成绩;输入参数包括学生信息结构体数组,学生人数,返回的每个学生的总成绩直接填充到对应的输入结构体数组对应字段中。统计信息包括三个专业的总人数、平均成绩数组,用全局变量来表示。访问每个学生信息的时候,用指针来指向当前正在处理的学生。 c) 设计一个或者三个带参数的宏,判断输入的字符串是否是指定的专业名称,并在函数Count中使用。 5. 编写main函数实现: a) 定义变量,其中保存学生信息的数据文件直接在源代码中初始化; b) 读取学生信息,如果失败,打印失败信息并退出程序; c) 统计学生信息; d) 输出统计信息。 e) 释放内存。 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> struct student{ char name[15]; char major[15]; int Eng_sco; int cal_sco; int c_sco; int sum; }; int tx_per=0,tx_ave,tx_sum=0; int wl_per=0,wl_ave,wl_sum=0; int wlw_per=0,wlw_ave,wlw_sum=0; int ReadStudentInfo(const char* filename, struct student** pStudents); void Count(struct student pStudents[], int num); int main() { int count; int m; struct student *list; count=ReadStudentInfo("readme.txt", &list); printf("学生信息: \n"); printf("----------------------------------------------------\n"); printf("序号 姓 名 专业名称 英语成绩 线性代数成绩 c语言成绩 总成绩\n"); for(m=1;m<=count;m++) { printf("%4d %s %s %4d %4d %4d %4d\n",m,(list+m-1)->name,(list+m-1)->major,(list+m-1)->Eng_sco,(list+m-1)->cal_sco,(list+m-1)->c_sco,(list+m-1)->sum); } Count(list, count); printf("\n统计信息 :\n"); printf("----------------------------------------------------\n"); printf("序号 专业名称 学生人数 平均成绩\n"); printf(" 1 通信 %d %d\n",tx_per,tx_ave); printf(" 2 网络 %d %d\n",wl_per,wl_ave); printf(" 3 物联网 %d %d\n",wlw_per,wlw_ave); return 0; } int ReadStudentInfo(const char* filename, struct student** pStudents) { FILE *fp; char ch; int i=1,j; fp=fopen(readme.txt,"r"); if(fp==NULL) { printf("cann't open the file"); exit(-1); } ch=fgetc(fp); while(ch!=EOF) { if(ch=='\n') { i++; } ch=fgetc(fp); } rewind(fp); *pStudents=(struct student*)malloc(sizeof(** pStudents)*i); for(j=0;j<i;j++) { fread(&*pStudents[j],sizeof(struct student)-sizeof(int),1,fp); (*pStudents+j)->sum=((*pStudents+j)->Eng_sco+(*pStudents+j)->cal_sco+(*pStudents+j)->c_sco); } fclose(fp); return i; } void Count(struct student pStudents[], int num) { int n=1; for(n=1;n<=num;n++) { if(!strcmp((pStudents+n-1)->major,"通信")) { tx_per++; tx_sum=tx_sum+(pStudents+n-1)->sum; } if(!strcmp((pStudents+n-1)->major,"网络")) { wl_per++; wl_sum=wl_sum+(pStudents+n-1)->sum; } if(!strcmp((pStudents+n-1)->major,"物联网")) { wlw_per++; wlw_sum=wlw_sum+(pStudents+n-1)->sum; } tx_ave=tx_sum/tx_per; wl_ave=wl_sum/wl_per; wlw_ave=wlw_sum/wlw_per; } free(pStudents); } ``` 运行不起来,是哪里出问题了?

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置及使用

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

如何在虚拟机VM上使用串口

在系统内核开发中,经常会用到串口调试,利用VMware的Virtual Machine更是为调试系统内核如虎添翼。那么怎么搭建串口调试环境呢?因为最近工作涉及到这方面,利用强大的google搜索和自己

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

北京师范大学信息科学与技术学院笔试10复试真题

北京师范大学信息科学与技术学院笔试,可以更好的让你了解北师大该学院的复试内容,获得更好的成绩。

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

Tomcat服务器下载、安装、配置环境变量教程(超详细)

未经我的允许,请不要转载我的文章,在此郑重声明!!! 请先配置安装好Java的环境,若没有安装,请参照我博客上的步骤进行安装! 安装Java环境教程https://blog.csdn.net/qq_40881680/article/details/83585542 Tomcat部署Web项目(一)·内嵌https://blog.csdn.net/qq_40881680/article/d...

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

[已解决]踩过的坑之mysql连接报“Communications link failure”错误

目录 前言 第一种方法: 第二种方法 第三种方法(适用于项目和数据库在同一台服务器) 第四种方法 第五种方法(项目和数据库不在同一台服务器) 总结 前言 先给大家简述一下我的坑吧,(我用的是mysql,至于oracle有没有这样的问题,有心的小伙伴们可以测试一下哈), 在自己做个javaweb测试项目的时候,因为买的是云服务器,所以数据库连接的是用ip地址,用IDE开发好...

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python数据分析师-实战系列

系列课程主要包括Python数据分析必备工具包,数据分析案例实战,核心算法实战与企业级数据分析与建模解决方案实战,建议大家按照系列课程阶段顺序进行学习。所有数据集均为企业收集的真实数据集,整体风格以实战为导向,通俗讲解Python数据分析核心技巧与实战解决方案。

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

期末考试评分标准的数学模型

大学期末考试与高中的考试存在很大的不同之处,大学的期末考试成绩是主要分为两个部分:平时成绩和期末考试成绩。平时成绩和期末考试成绩总分一般为一百分,然而平时成绩与期末考试成绩所占的比例不同会导致出现不同

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

c语言项目开发实例

十个c语言案例 (1)贪吃蛇 (2)五子棋游戏 (3)电话薄管理系统 (4)计算器 (5)万年历 (6)电子表 (7)客户端和服务器通信 (8)潜艇大战游戏 (9)鼠标器程序 (10)手机通讯录系统

相关热词 c# 不能序列化继承类 c# char* 调用 c# 开发dll模板 c#添加控件到工具箱 c#控制台组合数 编程计算猴子吃桃问题c# c# wpf 背景透明 随机抽取号码软件c# c# 开发环境 c# 属性和字段
立即提问