#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;
}
}