Сканирование одного символа в массив C Программирование - PullRequest
0 голосов
/ 30 сентября 2011

У меня проблема с сканированием символов в массив.Каждый раз, когда я это делаю, он пропускает следующее сканирование и переходит к следующему.Я знаю, что происходит, потому что вход также добавляет '\ n' к входу, но я не знаю, как устранить причину этого.Вот пример кода:

char charray [MAX], ffs;
int inarray [MAX], i;


for (i = 0; i < MAX; i++)
{
    charray[i] = getchar();
    printf ("%c\n",charray[i]);
    scanf ("%d", &inarray[i]);
    printf ("%d\n",inarray[i]);
}

Ответы [ 3 ]

0 голосов
/ 30 сентября 2011

Вы должны сканировать строку непосредственно в массив, а не символы, используя scanf("%s",&charray);

Однако ваш код будет работать, если вы добавите оператор while(getchar() != '\n' );. Это позволит получить все символы до '\ n'.

charray[i] = getchar();
do{
    c = getchar();
}while(c != '\n' && c!= EOF);
printf ("%c\n",charray[i]);
scanf ("%d", &inarray[i]);
do{
    c = getchar();
}while(c != '\n' && c!= EOF);    
printf ("%d\n",inarray[i]);
0 голосов
/ 30 сентября 2011

Вы читаете со стандартного входа с 2 функциями: getchar() и scanf(). Вам нужно понять, как они работают.

getchar() просто: он возвращает следующий доступный символ во входном потоке (или ждет его или возвращает EOF)

scanf("%d", ...) более сложный: сначала он по выбору отбрасывает пробелы (пробелы, вводы, табуляции, ...), затем читает столько символов, сколько возможно для представления целого числа, и останавливается на первом символе, который может ' может использоваться для целых чисел, например '\n'.

Поскольку они у вас в цикле, ваш getchar() вызов получит символ, который остановил scanf(), и следующий scanf() будет обработан оттуда.

Если вы введете что-то вроде "q1w22e333r4444" (с MAX == 4), ваша программа будет работать.

Если вы вводите что-то вроде

q 1
w 22
e 333
r 4444

после первого прохождения цикла (где charray[0] получает 'q' и inarray[0] получает 1), getchar() получит '\n', оставляя 'w' "готовым" для scanf, что конечно терпит неудачу ... и затем "пойман" следующим getchar(); и "22" назначается в третий раз через цикл (на inarray[2]).

Итак, вам нужно пересмотреть свой код.

Также scanf() возвращает значение. Используйте это значение

if (scanf("%d", &inarray[i]) != 1) /* error */;
0 голосов
/ 30 сентября 2011

Вы можете сделать это так.

while((c = getchar()) != '\n')
{
    putchar(c);
}

это может решить вашу проблему. или вы можете пойти до EOF также.

...