【问题标题】:Same name input/output issue同名输入/输出问题
【发布时间】:2012-02-17 09:47:32
【问题描述】:

好的,伙计们,我的程序还有一个问题。 我遇到了使用相同文件名(KnightsBall.“extension”)的问题。我不知道这是本地的问题,还是我将代码移过来时会遇到的问题。那么任何人都可以帮助我解决我忽略的事情吗?输出和输入都必须转到相同的文件名。(输入)或(输出)所以没有办法。如果我将输出文件更改为 knights.out 它可以工作。有任何想法吗? 相关代码段:

FILE *fr; 
FILE *fo;

typedef struct KnightsBallLottoPlayer 
{
char firstName[20];
char lastName[20];
int numbers[6];
} KBLottoPlayer;


int main()
{
KBLottoPlayer *temp;
int numPlays=0;
//What file to read from
fr = fopen("KnightsBall.in", "r");
//What file to read to
fo = fopen("KnightsBall.out", "w");

以及访问输出的部分:

if(match==3)
    fprintf(fo,"%s %s matched %d numbers and won $10.\n", temp[r].firstName, temp[r].lastName, match);
if(match==4)
    fprintf(fo,"%s %s matched %d numbers and won $100.\n", temp[r].firstName, temp[r].lastName, match);
if(match==5)
    fprintf(fo,"%s %s matched %d numbers and won $10000.\n", temp[r].firstName, temp[r].lastName, match);
if(match==6)
    fprintf(fo,"%s %s matched %d numbers and won $1000000.\n", temp[r].firstName, temp[r].lastName, match);

还有一个完全不相关的旁注,有没有人知道在我扫描用户需要的值后如何关闭命令提示符?非常感谢所有帮助。

【问题讨论】:

  • 我不太确定你的问题是什么。您是说您在阅读和写入 KnightsBall.in 时遇到问题吗?
  • 没有。我从 KnightsBall.in 读到。处理完信息后,我必须将 fprintf 语句输出到 KnightsBall.out。我遇到的问题是读入总是有效,但写出 KnightsBall.out 对文件没有任何作用。如果我将 KnightsBall.out 更改为 Knights.out,它的效果非常好。有什么想法吗?
  • 啊,我明白了;这很好奇。您确定仅在使用 fclose() 关闭文件后才检查文件的内容吗?
  • 我实际上从不使用 fclose() 关闭文件。我试过了,也没用。
  • 手动创建一个名为“KnightsBall.out”的空文件。运行你的程序。如果这不起作用,则此处未显示其他地方的错误。

标签: c input io


【解决方案1】:

由于您没有显示检查是否已成功打开每个文件的代码,因此很可能您没有打开输出文件。目前尚不清楚为什么,但一个可能的问题是输出文件已经存在并且是只读的。另一个可能是您没有在目录中创建文件的权限。

我不禁认为您可以使用字符串数组将打印减少到:

static const char *amounts[] = { "", "", "", "10", "100", "10000", "1000000" };
if (match >= 3 && match <= 6)
    fprintf(fo, "%s %s matched %d numbers and won $%s.\n",
            temp[r].firstName, temp[r].lastName, match, amounts[match]);

由于值之间没有简单的关系,最好使用表格而不是计算金额。

【讨论】:

  • 如果文件打开失败,那么fo就是NULL,那么fprintf会不会导致分段错误?但是话又说回来,正如您所提到的,错误的代码尚未发布。
  • 通常,在 Unix-ish 机器上,你会得到一个核心转储。我不知道你在 Windows 上得到了什么;关于“如何关闭命令提示符”的部分问题建议使用 Windows 平台。但是,从技术上讲,您会得到未定义的行为;任何事情都可能发生,没关系。
猜你喜欢
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 2017-11-23
  • 2012-05-04
  • 2013-12-15
  • 2020-06-12
相关资源
最近更新 更多