正如標題所說,我很好奇,如果有一種方法來讀取C++字符串與scanf。閱讀C++字符串與scanf
我知道我可以閱讀每個字符和應有的字符串插入它,但我想要的東西,如:
string a;
scanf("%SOMETHING", &a);
gets()
也不起作用。
在此先感謝!
正如標題所說,我很好奇,如果有一種方法來讀取C++字符串與scanf。閱讀C++字符串與scanf
我知道我可以閱讀每個字符和應有的字符串插入它,但我想要的東西,如:
string a;
scanf("%SOMETHING", &a);
gets()
也不起作用。
在此先感謝!
沒有的形勢下,其gets()
要使用!它是總是錯誤地使用gets()
並將其從C11中刪除並從C++ 14中刪除。
scanf()
doens't支持任何C++類。但是,您可以將結果從scanf()
存儲到std::string
:
std::string str(100, ' ');
if (1 == scanf("%*s", &str[0], str.size())) {
// ...
}
我不能完全肯定要指定scanf()
並在該緩衝區lenght的方式排序的參數去(有一個機會,參數&str[0]
和str.size()
需要反轉,並且我可能在格式字符串中缺少.
)。請注意,生成的std::string
將包含一個終止空字符,它不會改變其大小。
當然,我只是使用if (std::cin >> str) { ... }
但這是一個不同的問題。
你確定你的代碼正在編譯?我使用C++ 98和C++編譯錯誤11 –
@Vlad:當然,我認爲代碼應該編譯,假設你包含'
@Vlad:好的,我看到:看起來'std :: string'沒有聲明一個構造函數只佔用大小。使用'std :: string str(100,'');'修復了這個問題。 –
這可以工作
char tmp[101];
scanf("%100s", tmp);
string a= tmp;
我不知道我可以使用char []初始化C++字符串..非常感謝! :) –
只是好奇,爲什麼你不能使用cin或getline? –
在一些使用流的編譯器上需要花費很多時間......並且我正在爲這樣的編譯器編寫代碼.. –
@Vlad:你應該用'std :: ios_base :: syc_with_stdio(false);'如果從標準輸入讀取太慢。 –