Использование символа новой строки для прерывания цикла в c

#c

#c

Вопрос:

Я ищу способ прервать for цикл, используя enter в консоли Visual Studio.

 do {
    std::cin >> userInput;
    if (userInput == 'n')
        break;
    lineStorage[lineLength] = userInput;
    lineLength  ;
} while(true);
  

Это то, что у меня есть до сих пор, но символ новой строки не будет работать для того, что мне нужно. Любые предложения или идеи помогут.

PS Я не могу использовать контрольное значение, отличное от символа новой строки, полученного с помощью кнопки ввода.

PS Больше контекста:

 char lineStorage[80] = { 'a' };
char userInput = ' ';
const char lineEnd = 'n';

int lineLength = 0;

std::cout << "Enter a line:";

do {
    std::cin >> userInput;
    if (userInput == 'n')
        break;
    lineStorage[lineLength] = userInput;
    lineLength  ;
} while (true);
  

Комментарии:

1. @Elliott Любые базовые входные данные воссоздают эту проблему, но если я должен. «faifjfosijf sfeasiof» [Ввод]

2. Почему бы не использовать std::cin.get(userInput) ?

3. @treeTallAsian, достаточно справедливо. Я думаю, что «я слишком быстро прочитал ваш вопрос. 1

Ответ №1:

При чтении с >> помощью по умолчанию пропускаются пробелы, а новая строка является пробелом. Я предлагаю использовать getline() вместо:

 for(int i = 0; i < 80; i  ) {
    if (!getline(std::cin, userInput) || userInput.empty())
        break;
    lineStorage[lineLength] = userInput;
    lineLength  ;
}
  

Если вы lineStorage действительно должны хранить отдельные слова, вы можете разделить userInput их на пробелы перед сохранением слов.


Редактировать: теперь, когда вы показали, что userInput это один символ, я думаю, вам следует просто использовать std::cin.get(userInput) для чтения по одному символу за раз. Это позволит вам получить новые строки в стиле вашего исходного кода.

Комментарии:

1. Вероятно, мне помогло бы уточнить, что lineStorage хранит до 80 переменных char.

2. Спасибо! Я не обращал внимания на тот факт, что операторы >> не считывали пробелы.

Ответ №2:

Мне больше нравится другой ответ, но что-то подобное также должно работать:

 do {
  cin.get(userInput);
  if (userInput == 10) {
    break;
  } else { 
    lineStorage[lineLength] = userInput;
    lineLength  ;
  }
} while (true);
  

Ответ №3:

более понятным будет

 #include <stdio.h>
#include <stddef.h>

int main(int argc , char *argv[])
{
    char t[70]={0},x;
    while(1)
    {
        scanf("%[^ ^n]%c",t ,amp;x);
        if(x == 'n') break;
    }
}