как прочитать разные входные строки в файле через scanf

#c #scanf

#c #scanf

Вопрос:

Я пытаюсь прочитать разные входные строки через файл, используя scanf. Я смог прочитать только первую строку и сохранить ее.

вот код, который я написал.

 #include <stdio.h>
#include <string.h>   

int imageWidth, imageHeight, safeRegionStart, safeRegionWidth;

main(void)
{       
    int i=0, j=0; 
    int totalP, pixel, totalSafeP, concat; 
    int unsigned r,g,b;

    scanf("%d %d %d %d", amp;imageWidth, amp;imageHeight, amp;safeRegionStart, amp;safeRegionWidth);
    totalP = imageWidth * imageHeight ;
    totalSafeP = imageHeight * safeRegionWidth;
    char arr[512][50];
    char arr1[imageWidth][imageHeight];

    printf("total # of pixels: %dnTotal # of safe Pixels: %dn", totalP, totalSafeP);

    memset(arr,0x0,sizeof(arr));


    while(i!=totalP)
    {
        i  ;
        scanf("%d", amp;pixel);

        /*bit shifting to get r,g,b*/       
        int r = pixel << 8;
        r = (unsigned int)logicalRightShift(r, 24);

        int g = pixel << 16;
        g = (unsigned int)logicalRightShift(g, 24);

        int b = pixel << 24;
        b = (unsigned int)logicalRightShift(b, 24);
        //printf("%d) r:%d , g:%d , b:%dn",i, r,g,b);
        fillDescription(arr, r, g, b);


    }/*End for scanning all pixels*/
}/*end main*/ 
  

Ответ №1:

МОЙ совет — никогда не использовать scanf (или fscanf) для чтения входных данных. Прочитайте входные данные, используя другие методы (fgets и т.д.), А затем проанализируйте выходные данные. Возможно, с помощью sscanf, возможно, с какой-то другой системой. Я видел слишком много ошибок от людей, читающих напрямую с помощью scanf.

Комментарии:

1. 1: scanf общеизвестно, что его сложно корректно использовать даже с простыми файлами.

Ответ №2:

Ваш код считывает данные из стандартного ввода, а не из файла. Ваш код кричит, требуя проверки на ошибки, но работает в лучшем случае. Вот пример его запуска:

 $ ./test 
1 2 3 4
total # of pixels: 2
Total # of safe Pixels: 8
12
13
$ 
  

В принципе, не забудьте нажать <Enter> , scanf функция анализирует данные построчно.

Комментарии:

1. на самом деле мы просто вводим файл в строку аргумента, известную как a.out<input.txt но я читаю из текстового файла нет?

Ответ №3:

Как сказал Влад Лазаренко, вы считываете данные из стандартного ввода. Если вы хотите читать из файла, вы можете рассмотреть возможность использования fscanf.