как читать разные строковые входы в файл через scanf - PullRequest
0 голосов
/ 07 июня 2011

Я пытаюсь прочитать разные строки ввода через файл, используя 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", &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth);
    totalP = imageWidth * imageHeight ;
    totalSafeP = imageHeight * safeRegionWidth;
    char arr[512][50];
    char arr1[imageWidth][imageHeight];

    printf("total # of pixels: %d\nTotal # of safe Pixels: %d\n", totalP, totalSafeP);

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


    while(i!=totalP)
    {
        i++;
        scanf("%d", &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:%d\n",i, r,g,b);
        fillDescription(arr, r, g, b);


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

Ответы [ 3 ]

1 голос
/ 07 июня 2011

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

0 голосов
/ 07 июня 2011

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

0 голосов
/ 07 июня 2011

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

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

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

...