Одноименная проблема ввода / вывода - PullRequest
0 голосов
/ 24 января 2012

Хорошо, ребята, у меня есть еще одна проблема с моей программой. Я сталкиваюсь с проблемой с использованием того же имени файла (KnightsBall. "Расширение"). Я не знаю, является ли это чем-то локальным, или проблемой, которая возникнет при переносе кода. Так может кто-нибудь помочь мне с тем, что я пропускаю? Выходные данные и входные данные должны идти к одному и тому же имени файла. Если я изменю выходной файл на 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 голосов
/ 24 января 2012

Поскольку вы не показываете код, подтверждающий, что вы успешно открыли каждый файл, вероятно, вы не открыли выходной файл.Не понятно почему, но одна из возможных проблем заключается в том, что выходной файл уже существует и доступен только для чтения.Другая причина может заключаться в том, что у вас нет разрешения на создание файлов в каталоге.

Не могу помочь, но думаю, что вы можете использовать массив строк, чтобы уменьшить печать до:

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

Поскольку между значениями нет простого отношения, вероятно, лучше использовать таблицу, а не расчет для сумм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...