#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.