scanf сохраняет \ n символ в буфере - PullRequest
0 голосов
/ 12 ноября 2018

Я новичок в C и пытаюсь прочитать 6 integers с scanf. Однако я заметил и прочитал, что scanf оставляет символ \n (который есть в моей строке формата) в буфер, таким образом, «читает» дополнительный ввод от пользователя. На различных сообщениях стека я читал, что это можно просто решить, добавив пробел перед форматом% d (например: scanf(" %d\n",&var);, но это не работает для меня. Что я должен делать и почему это происходит?

Вот мой текущий код:

#include <stdio.h>

int main(void) {
    int A[2][3] = {};
    int B[3][2] = {};
    int i,j;
    for(i=0; i < 2;i++) {
        for(j=0; j < 3;j++) {
            scanf(" %d\n", &A[i][j]);
            getchar();
        }
    }
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

\n в строке формата на самом деле вызывает проблему.После чтения целого числа \n в строке формата соответствует любому количеству пробельных символов, поэтому функция не вернется, пока не будет введен какой-либо непробельный символ.

Измените строку формата следующим образом:

scanf("%d", &A[i][j]);

спецификатор формата %d неявно отбрасывает любые начальные пробельные символы, поэтому нет необходимости в начальном пробеле (это необходимо только для %c).

0 голосов
/ 12 ноября 2018

%d игнорирует пробелы перед числом. Эта проблема возникает только тогда, когда вы читаете число с %d (которое оставляет новую строку в буфере) и хотите прочитать символ с %c впоследствии. Там вы должны поставить пробел перед %c, чтобы он игнорировал символ новой строки в буфере.

Если вы хотите читать только цифры, вы можете использовать scanf("%d", &var);.

...