我有跟随Simple程序在C ++中打印字符串,但是这个程序只在空格之前读取字符,而不是读取完整的字符串。
#include<iostream>
using namespace std;
int main()
{
char str[90];
cout << "Enter a string:";
cin >> str;
cout << str;
system("pause");
}
答案 0 :(得分:3)
这是设计使然:cin
“打破”空白字符上的行,例如空格和制表符。
此外,您将输入限制为90个字符,这也不好:输入超过90个字符且中间没有空格会溢出缓冲区。
以下是解决问题的方法:
std::string str;
std::cout << "Enter a string: ";
std::getline(std::cin, str);
与字符数组不同,std::string
个对象可以动态增长,因此它们可以容纳用户选择输入的任意数量的字符。
您需要添加两个标头才能进行编译:
#include <string>
#include <iostream>
答案 1 :(得分:2)
>>
只读一个字。您希望getline
读取整行:
cin.getline(str, sizeof str);
现在的问题是,如果太长,该行将被截断。要解决这个问题,请使用字符串而不是固定大小的缓冲区:
string str;
getline(cin, str);