【发布时间】:2017-11-09 20:09:39
【问题描述】:
所以,我最大的功课是用 C 语言制作一个想成为百万富翁的游戏,但我有一个小问题。我有一个包含 5000 行数据的 csv 文件,如下所示:
...
4;我多大了?;22;狗;黄色;谁知道;A;个人
2;乌得勒支在哪里?;英格兰;尼德兰;法国;瑞典;B;地质
15;...
...
我总是要扫描5000题中的一个,总是需要比上一个更难(简单,我们有15个难度级别和15个问题),并且需要打印在屏幕上(所以我需要问题,答案和其他问题(不需要地质学))。但问题是:我必须始终使用 malloc!怎么可能知道字符串有多长?
我在这里:
srand(time(NULL));
int num=1;
char* onerow=(char*) malloc(num*sizeof(char));
int row=rand()%1000;
char c;
FILE *fp;
fp = fopen("proba.txt", "r");
for (int i=0; i<=row-1; i++) {
if(i!=row-1) { //not the row we need, jump over it
while(c!='\n')
c=fgetc(fp);
}
if(i==row-1) {
for(int j=0; onerow[j]!='\n'; j++) { //this is what we need
onerow[j]=fgetc(fp);
onerow = (char *) realloc(onerow, ++num*sizeof(char));
}
}
}
onerow[num]='\0';
fclose(fp);
printf("%s\n", onerow);
free(onerow);
}
【问题讨论】:
-
你尝试了什么?
-
如果第一个字母是我需要的(困难),我试图计算一整行中的所有字符(以便稍后分解数据)。但后来我无法使用 fgets 扫描该行,只能扫描下一行。
-
请尝试显示第一行解析的代码,然后我们可能会为您提供帮助。
-
我在大学学习编程只有 2 个月,我根本无法编写可以做到这一点的代码,但是我在过去 3 天里一直在努力。
-
int main(void) { srand(time(NULL)); char onerow[255]; int row=rand()%1000; FILE *fp; fp = fopen("proba.txt", "r"); for (i=0; i<=row-1; i++) { fgets(onerow, 255, (FILE*)fp); } fclose(fp); printf("%s\n", onerow); }
标签: c arrays dynamic malloc scanf