Может кто-нибудь помочь мне найти логическую ошибку в C?Я пытаюсь fscanf для массива и переменной. - PullRequest
0 голосов
/ 19 октября 2011

Я пишу программу, которая вызывает несколько других функций из main.c. В main.c я должен открыть файл размером 33 дюйма и поместить первые десять в массив (a []). РАЗМЕР десять. 11-е целое должно быть сохранено в переменной для последующего использования в качестве цели поиска, поэтому я назвал ее целью. Я пробовал несколько разных способов попытаться получить 11-й int в цель. Это дает мне логическую ошибку. Может ли кто-нибудь объяснить мне, где ошибка? Насколько я понимаю, логическая ошибка имеет синтаксический смысл, но что-то в коде не имеет смысла, например, попытка использовать глагол вместо предлога. Я не уверен, слишком ли я новичок в этом, чтобы увидеть ошибку или слишком долго на нее пялился. Выходные данные показывают, что массив заполнен правильно, но цель всегда равна 0, поэтому 11-й тип int помещается в следующий массив. Код это просто фрагмент.

Спасибо за любую помощь !!

int main (void)
    {
         int a[SIZE];
         int i;
         int j;
         int trgt[1];
         int target;
         FILE* fpmyfile;
         int closeResult;

    printf("Function working 1.\n");

         fpmyfile = fopen("MYFILE.DAT", "r");                     // open file myfile
    printf("Function opening file.\n");
            if(!fpmyfile)
                {
                     printf("Could not open input file.\n");
                     exit (101);
                }
            else printf("The file opened.\n");

    printf("Starting for loop.\n");

         for(j = 1; j <= 3; j++)
            {
                 for(i = 0; i <= SIZE - 1; i++)                    //get ints from myfile into array
                     {
                       if(i != SIZE)
                          fscanf(fpmyfile, "%d", &a[i]);
                       else if(i = SIZE)
                            fscanf(fpmyfile, "%d", &trgt[i]);
                     }

            target = trgt[1];

    printf("Scan a done.\n");
    printf("\nScanned into a[]");
    printf("Target is %3d\n.", target);   //This print statement says that target is 0

Ответы [ 3 ]

1 голос
/ 19 октября 2011
 for(i = 0; i <= SIZE - 1; i++)

Обычный способ написать это for(i = 0; i < SIZE; ++i).Обратите внимание, что меньше чем вместо меньше или равно.Использование преинкремента вместо постинкремента не очень важно в C.

 if(i != SIZE)
     fscanf(fpmyfile, "%d", &a[i]);
 else if(i = SIZE)
     fscanf(fpmyfile, "%d", &trgt[i]);

В другом случае, если вы выполняете задание: i = SIZE.Это интерпретируется в контексте условного как ( i = SIZE ) != 0.Вам действительно нужно сравнение: i == SIZE, но все равно я никогда не буду равняться SIZE, поскольку цикл заканчивается только за один раз до SIZE.

Для чтения n целых в массив и следующегоint в другом месте, сделайте это:

for( i = 0; i < n; ++i ) // reads n ints
{
     fscanf(fpmyfile, "%d", &a[i]);
}
fscanf(fpmyfile, "%d", &target); // reads an additional int into target
0 голосов
/ 19 октября 2011

Ваша ошибка с этим кодом:

             for(i = 0; i <= SIZE - 1; i++)                    //get ints from myfile into array
                 {
                   if(i != SIZE)
                      fscanf(fpmyfile, "%d", &a[i]);
                   else if(i = SIZE)
                        fscanf(fpmyfile, "%d", &trgt[i]);
                 }

В строке else if(i = SIZE) есть две ошибки, во-первых, вам нужен оператор ==, а не оператор =.

Вторая ошибка в строке заключается в том, что она должна читать else if(i == SIZE - 1).

Если перед ним, if(i != SIZE), тоже неверно, я думаю, вы хотите if(i != SIZE - 1). Если вы сделали это, вы можете упростить свой последний else if( i == SIZE - 1) до else.

В качестве дополнительного примечания всегда полезно окружить ваши блоки if и else символами {}, чтобы предотвратить другие логические ошибки, если вы добавите вторую строку в будущем.

Итак, кратко измените этот раздел на:

             for(i = 0; i <= SIZE - 1; i++)                    //get ints from myfile into array
                 {
                   if(i != SIZE - 1) {
                      fscanf(fpmyfile, "%d", &a[i]);
                   }
                   else {
                        fscanf(fpmyfile, "%d", &trgt[i]);
                   }
                 }
0 голосов
/ 19 октября 2011

Я полагаю, что ваша проблема в том, что когда вы написали & trgt [i], вы имели в виду & trgt [0] (и большинство программистов использовали бы семантически эквивалентный trgt), также когда вы переназначали таргетинг, вы, вероятно, имели в виду target = trgt [0].

Также в ваш второй, если вы использовали один =, где я подозреваю, вы намеревались ==.

Не уверен, как вы оказались здесь, но мне кажется, что вы можете сканировать непосредственно в целевую переменную, если хотите.

...