gpt4 book ai didi

C - 文件管理,无法获得想要的输出

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:27 27 4
gpt4 key购买 nike

我正在做我的学校作业,我遇到了我的第一个主要障碍......我无法写入文件,甚至无法使用 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);

这是一个小片段;使用上面的代码我无法检索输入的输入并将其打印出来显示/到文件。

我的意图是有 100 个字符串,每个字符串最多 15 个字符。

假设我要输入像 18/12/15 或 18-12-15 这样的日期,或者像“Daniel”这样的词,程序会在我按下回车键后突然停止几秒钟,然后继续显示“按任意键...”。

我也收到这个错误...

[警告] ...\assignment\test.c:22:警告:传递 `fgets' 的 arg 1 使指针来自整数而不进行强制转换

我真的不明白,因为变量 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 输入数据,函数 fscanf 在读取模式下打开。然而,输出使程序挂起,我也无法在程序中键入或执行任何操作。

另外,请告知我对 !feof 的用法是否正确/合适。

感谢您的帮助。

最佳答案

我发现您显示的代码有两个问题:

  1. 你得到的警告,因为 date_trans[i][j]char , 不是 char *
  2. 您的内部循环来自 020 (含)并将其用作包含 15 个元素的数组的索引(即从 014 的索引)。

为了解决这两个问题,不要有内循环,而是在外循环

fgets(data_trans[i], sizeof data_trans[i], stdin);

问题编号 1 也存在于 printf 中调用,你传递一个 char到需要 char * 的格式.

最后,请注意您对包含 15 个字符的字符串的要求:不要忘记空终止符,它也需要在数组中有一个空格。这意味着您目前有 14 个字符加上终止符的位置。

关于C - 文件管理,无法获得想要的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53516420/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com