我可以用std::cin
读取一个字符串,但我不知道如何用一个withscanf()读取。如何更改下面的代码以使用scanf()?
string s[20][5];
for (int i=1;i<=10;i++)
{
for (int j=1;j<=3;j++)
{
cin>>s[i][j];
}
}
答案 0 :(得分:10)
使用C scanf()
函数需要使用C字符串。此示例使用临时C字符串tmp
,然后将数据复制到目标std::string
。
char tmp[101];
scanf("%100s", tmp);
s[i][j] = tmp;
答案 1 :(得分:3)
你不能,至少不能直接。 scanf()
函数是一个C函数,它不知道std::string
(或类),除非你包括。
答案 2 :(得分:2)
不确定为什么你需要使用scanf而Greg已经涵盖了如何使用。但是,您可以使用向量而不是常规字符串数组。
这是使用一个也使用scanf的向量的例子(基于C ++ 0x范围的循环):
#include <string>
#include <vector>
#include <cstdio>
using namespace std;
int main() {
vector<vector<string>> v(20, vector<string>(5, string(101, '\0')));
for (auto& row: v) {
for (auto& col: row) {
scanf("%100s", &col[0]);
col.resize(col.find('\0'));
}
}
}
但是,假设您希望按照用户输入的顺序填写所有元素,这与您的示例不同。
另外,getline(cin,some_string)如果经常比cin&gt;&gt;更好!或scanf(),取决于你想做什么。