No estoy seguro de por qué necesita utilizar scanf y Greg ya cubrió cómo. Pero puedes hacer uso de vectores en lugar de una matriz de cadenas regular.
He aquí un ejemplo del uso de un vector que también utiliza scanf (con C++ 0x gama basada en los bucles):
#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'));
}
}
}
Pero, eso supone que desea rellenar todos los elementos con el fin de la entrada del usuario, que es diferente de tu ejemplo.
También, getline (cin, some_string) si a menudo es mucho mejor que cin >> o scanf(), dependiendo de lo que quieras hacer.
¿Por qué quieres hacer eso? Tu solución parece estar bien. –
http://linux.die.net/man/3/scanf –
¿Por qué querrías usar scanf? –