如何在C ++中使用scanf()读取字符串?

时间:2011-05-06 11:05:52

标签: c++ string input scanf

我可以用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];
  }
}

3 个答案:

答案 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(),取决于你想做什么。