C как правильно вводить данные - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь получить предложение и письмо от пользователя, и по какой-то причине он не получает письмо, которое не делает scanf то же самое с getcahr();

void main(){

    char str[100];
    char letter;
    printf("Enter a line: \n");
    scanf("%s", str);
    printf("Enter a letter: ");
    scanf("%c", &letter);
    printf("%c", letter);
}

пробовал помещая NULL в букву без разницы

Ответы [ 3 ]

0 голосов
/ 29 мая 2020

// Кажется, что это неправильно в зависимости от компилятора. Я использовал CLion для выполнения приведенного ниже кода и добавляю пробел перед знаком процента в scanf.

// Надеюсь, это поможет :)

#include <stdio.h>

int main() {
    char name[100];
    char a;

    printf("enter anything \n");
    scanf(" %s %c", &name,&a);
    printf("%s space   %c",name,a);
    return 0;
}
0 голосов
/ 29 мая 2020

scanf("%s" читает слово, разделенное пробелами, НЕ строку. Таким образом, он пропускает любые начальные пробелы на вводе, а затем читает непробельные символы до (и не включая) следующего символа пробела. Поскольку символ новой строки является пробелом, он завершит этот процесс, но любой другой пробел также завершит его.

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

Если вы хотите прочитать строку, используйте fgets или getline

0 голосов
/ 29 мая 2020

Одна из возможных причин может заключаться в том, что он берет новую строку, которую вы получаете после нажатия клавиши ввода, когда вы получаете строку. Поэтому нам нужно указать scanf, чтобы он избегал символа новой строки. Попробуйте поставить пробел перед% c this скажет scanf игнорировать символы новой строки. scanf ("% c", & буква)

...