好的伙计们,我的程序还有一个问题。
我遇到了使用相同文件名(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);
另外在一个完全不相关的旁注上,有人知道在我扫描用户需要的值后如何关闭命令提示符吗?非常感谢所有帮助。
答案 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]);
由于值之间没有简单的关系,因此最好使用表而不是计算金额。