我必须写这段代码,我的意思是我应该从文件中读取学生的名字和他们的分数,然后根据分数的增长对学生进行排序。现在我只想输出分数。我想用结构显示成绩。我不知道问题出在哪里。第一个
nhhxz33t1#
ptr = fopen("test.txt", "r"); if (NULL == ptr) { perror("test.txt"); return 1; // this could be one way }
strok
const char s[1] = " ";
\0
const char s[] = " "; // or const char s[2] = " "; or const char *s = " ";
PI1[N]
while (i < N && fgets(str, sizeof str, ptr) != NULL) { // ^^^^^^^^
中
while (i < N && fgets(str, sizeof str, ptr) != NULL) { token = strtok(str, s); if(!token) break; // token check strcpy(PI1[i].surname, token); token = strtok(NULL, s); if (token) // token check PI1[i].mark = atoi(token); else break; i++; }
strcpy
struct student
char str[50];
surname
str
while (i < N && fgets(PI1[i].surname, sizeof PI1[i].surname, ptr) != NULL) { token = strtok(PI1[i].surname, s); if(!token) break; token = strtok(NULL, s); if (token) PI1[i].mark = atoi(token); else break; i++; }
printf("The marks are:\n"); for(int idx = 0; idx < i; ++idx) { printf("%d ", PI1[idx].mark); } putchar('\n');
一样多的标记
1条答案
按热度按时间nhhxz33t1#
strok
的第二个参数应该是以空值终止的字符串。const char s[1] = " ";
只能容纳 * 一个 * 字符。没有空值终止符(\0
)。请将其设置为:PI1[N]
等中
strok
是否返回了指向新令牌的指针。如果没有,那么你读到的代码行不符合要求。strcpy
,直接阅读你的struct student
,因为char str[50];
和surname
的长度相同。str
应该更大一些,但是现在:一样多的标记