2013-11-23 112 views
17

正如標題所說,我很好奇,如果有一種方法來讀取C++字符串與scanf。閱讀C++字符串與scanf

我知道我可以閱讀每個字符和應有的字符串插入它,但我想要的東西,如:

string a; 
scanf("%SOMETHING", &a); 

gets()也不起作用。

在此先感謝!

+7

只是好奇,爲什麼你不能使用cin或getline? –

+0

在一些使用流的編譯器上需要花費很多時間......並且我正在爲這樣的編譯器編寫代碼.. –

+1

@Vlad:你應該用'std :: ios_base :: syc_with_stdio(false);'如果從標準輸入讀取太慢。 –

回答

13

沒有的形勢下,其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) { ... }但這是一個不同的問題。

+0

你確定你的代碼正在編譯?我使用C++ 98和C++編譯錯誤11 –

+0

@Vlad:當然,我認爲代碼應該編譯,假設你包含''和'',並且位於函數內。你得到什麼錯誤信息? –

+0

@Vlad:好的,我看到:看起來'std :: string'沒有聲明一個構造函數只佔用大小。使用'std :: string str(100,'');'修復了這個問題。 –

20

這可以工作

char tmp[101]; 
scanf("%100s", tmp); 
string a= tmp; 
+3

我不知道我可以使用char []初始化C++字符串..非常感謝! :) –

-3
string temp; 
scanf("%s",&temp.c_str()); 

我希望它能工作!

+1

這不是一個好主意。'scanf'會期望char的非const指針。 – dreamlax