这是一个基本问题,但我是C ++的新手所以提前道歉:)
我似乎无法打印出存储在矢量中的字符串。我使用了std :: cout以及printf但是printf似乎给出了错误“程序已经停止工作”。我哪里错了?
这是带有std :: cout的代码: -
#include <iostream>
#include <cstdio>
#include <vector>
#include <fstream>
using namespace std;
int main(){
int np;
string temp;
scanf("%d", &np);
vector <int> money;
vector <string> names;
for(int i = 0; i< np; i++){
scanf("%s", &temp);
names.push_back(temp);
cout << names[i] << endl;
}
return 0;
}
这根本没有返回任何字符串。
我尝试使用printf的另一个程序是完全相同的,除了cout行替换为:
printf("%s", &names[i]);
答案 0 :(得分:1)
您无法立即使用scanf()
读取整数。
这应该有效:
int np;
std::string temp;
std::cout << "Enter the size: ";
std::cin >> np;
//vector <int> money;
std::vector<std::string> names;
for (int i = 0; i< np; i++) {
std::cin >> temp;
names.push_back(temp);
std::cout << names[i] << endl;
}
答案 1 :(得分:0)
您不应该使用scanf
来阅读std::string
,因为%s
已修改后会接受char*
。您也不应使用printf("%s", &names[i]);
打印std::string
对象。
scanf
和printf
是C函数。 C语言中没有std::string
类型,因此,它们使用普通的char数组运行。
您应使用scanf
和printf
代替std::cin
和std::cout
:
std::string str;
std::cin >> str; // input str
std::cout << str; // output str
答案 2 :(得分:0)
您需要更改有关代码的两件事。 首先,,scanf()并不支持任何c ++类。您可以在此link上详细了解相关信息。 第二,要替换scanf(),您可以使用 getline(cin,temp)。要使用它,您应该在拨打getline之前添加一行 cin.ignore(); ,因为您输入了一个数字并按下输入&#39; \ n&#39;字符被插入到cin缓冲区中,将在下次调用getline时使用。
#include <iostream>
#include <cstdio>
#include <vector>
#include <fstream>
using namespace std;
int main(){
int np;
string temp;
scanf("%d", &np);
vector <int> money;
vector <string> names;
cin.ignore();
for(int i = 0; i< np; i++){
getline(cin, temp);
names.push_back(temp);
cout << names[i] << endl;
}
return 0;
}
查看代码here的工作演示。
我希望我能够正确解释它。