同名输入/输出问题

时间:2012-01-24 04:08:33

标签: c input io

好的伙计们,我的程序还有一个问题。 我遇到了使用相同文件名(KnightsBall。“扩展名”)的问题。我不知道它是否是本地的东西,或者当我移动代码时我会遇到的问题。所以任何人都可以帮我找到我忽略的东西吗?输出和输入必须都是相同的文件名。(in)或(out)所以没有办法。如果我将输出文件更改为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);

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

1 个答案:

答案 0 :(得分:0)

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

我不禁想到你可以使用字符串数组来减少打印:

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]);

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