Как я могу прочитать строку с scanf () в C ++? - PullRequest
5 голосов
/ 06 мая 2011

Я могу прочитать строку с помощью std::cin, но я не знаю, как читать с одним с помощью scanf ().Как я могу изменить код ниже, чтобы использовать scanf ()?

string s[20][5];

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

Ответы [ 3 ]

10 голосов
/ 06 мая 2011

Использование функции C scanf() требует использования строк C. В этом примере используется временная строка C tmp, затем копируются данные в место назначения std::string.

char tmp[101];
scanf("%100s", tmp);
s[i][j] = tmp;
3 голосов
/ 06 мая 2011

Вы не можете, по крайней мере, не напрямую. Функция scanf() является функцией C, она не знает о std::string (или классах), если вы не включите.

2 голосов
/ 06 мая 2011

Не уверен, почему вам нужно использовать scanf, а Грег уже рассказывал, как. Но вы можете использовать вектор вместо обычного строкового массива.

Вот пример использования вектора, который также использует 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 >> или scanf (), в зависимости от того, что вы хотите сделать.

...