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

发布于 2024-11-05 14:41:36 字数 229 浏览 0 评论 0原文

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

I can read a string with std::cin but I don't know how to read with one withscanf(). How can I change the code below to use scanf() ?

string s[20][5];

for (int i=1;i<=10;i++)
{
  for (int j=1;j<=3;j++) 
  {
      cin>>s[i][j];
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜警司 2024-11-12 14:41:36

使用 C scanf() 函数需要使用 C 字符串。此示例使用临时 C 字符串 tmp,然后将数据复制到目标 std::string

char tmp[101];
scanf("%100s", tmp);
s[i][j] = tmp;

Using the C scanf() function requires using C strings. This example uses a temporary C string tmp, then copies the data into the destination std::string.

char tmp[101];
scanf("%100s", tmp);
s[i][j] = tmp;
妄司 2024-11-12 14:41:36

你不能,至少不能直接。 scanf() 函数是一个 C 函数,它不知道 std::string (或类),除非您包含 .

You can't, at least not directly. The scanf() function is a C function, it does not know about std::string (or classes) unless you include .

¢好甜 2024-11-12 14:41:36

不知道为什么需要使用 scanf,Greg 已经介绍了如何使用。但是,您可以使用向量而不是常规字符串数组。

下面是一个使用向量的示例,该向量也使用 scanf(带有基于 C++0x 范围的 for 循环):

#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 好很多 >>>或 scanf(),具体取决于您想要执行的操作。

Not sure why you need to use scanf and Greg already covered how. But, you could make use of vector instead of a regular string array.

Here's an example of using a vector that also uses scanf (with C++0x range-based for loops):

#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'));
        }
    }
}

But, that assumes you want to fill in all elements in order from input from the user, which is different than your example.

Also, getline(cin, some_string) if often a lot nicer than cin >> or scanf(), depending on what you want to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文