Ответ 1
Вы должны использовать cin.getline()
:
char input[100];
cin.getline(input,sizeof(input));
#include <string>
std::string input;
std::cin >> input;
Пользователь хочет ввести "Hello World". Но cin
терпит неудачу в промежутке между двумя словами. Как я могу сделать так, чтобы cin
во всем Hello World
?
На самом деле я делаю это со структурами, а cin.getline
, похоже, не работает. Вот мой код:
struct cd
{
std::string CDTitle[50];
std::string Artist[50];
int number_of_songs[50];
};
std::cin.getline(library.number_of_songs[libNumber], 250);
Это приводит к ошибке. Есть идеи?
Вы должны использовать cin.getline()
:
char input[100];
cin.getline(input,sizeof(input));
Он не "терпит неудачу"; он просто перестает читать. Он видит лексический токен как "строку".
Используйте std::getline
:
int main()
{
std::string name, title;
std::cout << "Enter your name: ";
std::getline(std::cin, name);
std::cout << "Enter your favourite movie: ";
std::getline(std::cin, title);
std::cout << name << " favourite movie is " << title;
}
Обратите внимание, что это не то же самое, что std::istream::getline
, которое работает с буферами char
C-style, а не std::string
s.
Обновление
Ваш отредактированный вопрос мало похож на оригинал.
Вы пытались getline
в int
, а не в строке или символьном буфере. Операции форматирования потоков работают только с operator<<
и operator>>
. Либо используйте один из них (и соответственно настройте для ввода нескольких слов), либо используйте getline
и лексически конвертируйте в int
после факта.
Использование:
getline(cin, input);
эту функцию можно найти в
#include <string>
Стандартная библиотека предоставляет функцию ввода, называемую ws
, которая потребляет пробелы из входного потока. Вы можете использовать его следующим образом:
std::string s;
std::getline(std::cin >> std::ws, s);
Вы хотите использовать функцию .getline в cin.
#include <iostream>
using namespace std;
int main () {
char name[256], title[256];
cout << "Enter your name: ";
cin.getline (name,256);
cout << "Enter your favourite movie: ";
cin.getline (title,256);
cout << name << " favourite movie is " << title;
return 0;
}
Взял пример из здесь. Проверьте его для получения дополнительной информации и примеров.
C WAY
Вы можете использовать функцию gets
, найденную в cstdio (stdio.h в c):
#include<cstdio>
int main(){
char name[256];
gets(name); // for input
puts(name);// for printing
}
С++ WAY
gets
удаляется в С++ 11.
[Рекомендуется]: вы можете использовать getline (cin, name), который находится в string.h
или cin.getline(name, 256), который находится в iostream
сам.
#include<iostream>
#include<string>
using namespace std;
int main(){
char name1[256];
string name2;
cin.getline(name1,256); // for input
getline(cin,name2); // for input
cout<<name1<<"\n"<<name2;// for printing
}
Это старый вопрос, но может кто-нибудь сказать мне, если мое решение неверно:
std::string s, temp;
std::stringstream ss;
while(std::cin>>temp){
ss<<temp;
ss<<" ";
}
s = ss.str();
Пример программы (из cpp.sh) делает именно это:
#include <iostream>
#include <string>
int main()
{
std::string name;
std::cout << "What is your name? ";
getline(std::cin, name);
std::cout << "Hello, " << name << "!\n";
}
int main(){
char name[20];
gets(name);
}
use gets() принимает строку (массив char в C) с пробелами.