【发布时间】:2018-11-28 09:42:46
【问题描述】:
我正在做我的学校作业,我遇到了我的第一个主要障碍......我无法写入文件,甚至无法使用 scanf 和 fgets 检索输入。
问题一:
FILE *f1;
char date_trans[100][15];
f1 = fopen("test.txt", "w");
if (f1 == NULL)
printf("File could not be opened.\n");
else
printf("Enter details (sender, receiver, amount.)\n");
for(i = 0; i <= element; i++)
{
for(j = 0; j <= 20; j++)
fgets(date_trans[i][j], 15, stdin);
printf("%s", date_trans[i][j]);
}
fclose(f1);
这是一个小sn-p;使用上面的代码,我无法检索输入的输入并将其打印在显示器上/到文件中。
我的意图是有 100 个字符串,每个字符串最多 15 个字符。
假设我要输入像 18/12/15 或 18-12-15 这样的日期,或者像“Daniel”这样的词,程序会在我按 Enter 后突然停止几秒钟,然后继续显示“按任意键...”。
我也收到此错误...
[Warning] ...\assignment\test.c:22: warning: passing arg 1 of `fgets' makes pointer from integer without a cast
我真的不明白,因为变量 date_trans 是字符串/二维字符数组,而不是整数,对吧?
编辑:
问题 2:
for (j=0; j <= 50 || !feof(f1); j++); // f1 opened in 'r' mode.
{
fscanf(f1, "%s %d %s %d %s %f", date_trans[j], &accsend[j], accnames[j],
&accreceive[j], accnamer[j], &amount_trans[j]);
printf("%d %s %d %s %d %s %.2f\n", j+1, date_trans[j], accsend[j], accnames[j],
accreceive[j], accnamer[j], amount_trans[j]);
}
在上面的代码中,我尝试使用 fscanf 函数通过流 f1 输入数据,该函数以读取模式打开。但是输出使程序挂起,我也无法在程序中键入或执行任何操作。
同时,请告知我对 !feof 的使用是否正确/合适。
感谢您的帮助。
【问题讨论】:
-
date_trans[i][j]是char,而不是char * -
@PaulOgilvie 嗨,感谢您的评论。您能否详细说明为什么 date_trans[i] 是 char* 而 date_trans[i][j] 不是?
-
'else' 语句需要括号。识别是不够的!
-
并在“for j”循环中用括号括住 fgets 和 printf 语句。这不是 Python!
-
date_trans是一个字符串数组。date_trans[i]是一个字符串,因此指向组成字符串的字符。编译器将其解释为指向 char 的指针。
标签: c arrays string file-management