Программирование на C: как завершить работу программы, когда пользователь вводит новую строку - PullRequest
1 голос
/ 18 октября 2019

Я создаю основную программу на C, которая постоянно запрашивает у пользователя ввод строки и распечатывает введенный ввод. Программа должна завершаться, когда пользователь вводит пустую строку. Тем не менее, в моей следующей программе, даже когда у меня есть условие, которое проверяет, ввел ли пользователь пустую строку, программа продолжает работать, пока пользователь не введет ввод. Ниже мой код:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char userString[100];
    while (1 == 1) {
        scanf("%s", userString);
        printf("USER ENTERED %s\n", userString);
        if (userString[0] == '\n') {
            exit(0);
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Функция scanf обычно читает разделенный пробелами"токен" (слова, цифры и т. Д.).

Почти все спецификаторы формата (включая %s) пропустить ведущий пробел (все пробелы, такие как пробел, табуляция и перевод строки). Единственными двумя форматами, которые не пропускают пробел, является формат %[ и формат %c, первый из которых может быть полезен для вас, но я рекомендую против него.

Чтобы прочитать строк Вместо этого я рекомендую функцию fgets. Если единственным символом в буфере является символ новой строки, то у вас есть пустая строка.

2 голосов
/ 18 октября 2019
    scanf("%s", userString);        scanf("%s", userString);

scanf с %s будет считывать входной поток до тех пор, пока он не встретит какой-либо из пробелов. Таким образом, символ новой строки не будет включен как часть userString.

. Вместо этого используйте fgets.

   fgets(userString, sizeof userString, stdin);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...