我可以用std::cin
讀取一個字符串,但我不知道如何用withscanf()讀取一個字符串。我如何改變下面的代碼來使用scanf()?如何在C++中使用scanf()讀取字符串?
string s[20][5];
for (int i=1;i<=10;i++)
{
for (int j=1;j<=3;j++)
{
cin>>s[i][j];
}
}
我可以用std::cin
讀取一個字符串,但我不知道如何用withscanf()讀取一個字符串。我如何改變下面的代碼來使用scanf()?如何在C++中使用scanf()讀取字符串?
string s[20][5];
for (int i=1;i<=10;i++)
{
for (int j=1;j<=3;j++)
{
cin>>s[i][j];
}
}
使用C scanf()
函數需要使用C字符串。本示例使用臨時C字符串tmp
,然後將數據複製到目標std::string
。
char tmp[101];
scanf("%100s", tmp);
s[i][j] = tmp;
noob問題:如果您使用「%100s」,當您輸入少於100個字符的字符串時,它將存儲什麼? (因爲要存儲100個字符) – 2013-01-08 07:40:50
@HaiPhong:'tmp'將包含輸入字符串的內容。 '%100s'表示將存儲100個字符的*最大*(加上NUL終止符)。 – 2013-01-08 07:42:26
你不能,至少不能直接。函數scanf()
是C函數,它不知道std::string
(或類)。
不知道爲什麼你需要使用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 >>或scanf()更好,這取決於你想要做什麼。
爲什麼你想這樣做?你的解決方案似乎很好 – 2011-05-06 11:08:17
http://linux.die.net/man/3/scanf – 2011-05-06 11:08:52
爲什麼要使用scanf? – 2011-05-06 11:14:19