什麼是語法,輸入字符串與空間多於一個字,即兩者之間通過scanf()函數沒有得到()多字字符串輸入
多字字符串輸入
回答
我不要認爲scanf()是可行的。 如果你知道你想讀的單詞數,你可以用
char str1[100], str2[100];
scanf("%s %s", str1, str2);
注意,這是一個巨大的安全漏洞,因爲用戶可以很容易地輸入一個字符串,它比分配的空間再閱讀。
如果您不知道單詞的數量,則可能需要更改您的問題。你需要讀什麼?爲什麼你不想使用gets(),爲什麼它必須是scanf()?
當然'gets'也是它自己的安全漏洞,而應該用'fgets'代替。 – 2010-08-24 09:41:07
如果你使用像scanf(「%99s%99s」,str1,str2)這樣的公認的scanf格式參數,那麼就沒有「巨大的安全漏洞」 – user411313 2010-08-24 10:04:02
感謝gordon,我不知道格式化器的寬度字段。但是如何處理> 99個字符的單詞呢?字符是否被正確丟棄,還是會在輸入緩衝區中逗留並導致下一個格式化程序失敗? – 2010-08-24 11:10:31
如果你想你可以從文件中讀取整條生產線:
scanf("%[^\n]\n", line);
現在,你可以使用sscanf會得到每一個字:
sscanf(line, "%s", word);
line += strlen(word) + 1;
「行」和「字」是字符指針。
請注意線路如何走向下一個單詞。
'scanf(「%[^ \ n] \ n」,行);'**不會**總是讀整行。它不會將任何內容保存到'line'中,輸入是'「\ n」'並且'\ n''將保留在'stdin'中。 'sscanf(line,「%s」,word);'如果'line'只由空格組成,''不會將任何內容保存到'word'中。 – chux 2015-01-02 21:18:25
char name[50];
printf("Enter your full name: ");
scanf("%[^\n]s",name);
這裏[^\n
表明scanf()
將繼續接收字符到name[ ]
直到遇到\n
。
scanf(「%[^ \ n] s」,name);''中不需要's'。 – chux 2015-01-02 21:16:01
更好地使用fgets()
比scanf()
閱讀一行用戶輸入。
如果代碼必須使用scanf()
然後
char buf[100];
// Read up to 99 char and then 1 \n
int count = scanf("%99[^\n]%*1[\n]", buf);
if (count == EOF) {
Handle_EndOfFile(); // or IO error
}
if (count == 0) { // Input began with \n, so read and toss it
scanf("%*c");
}
現在解析buf
個別單詞。
char field1[40];
char field2[40];
char field3[40];
char field4[40];
char field5[40];
char field6[40];
/*
* sscanf(workarea, format, field of pointers)
* Interpret [^ ] as a field ending in a blank
* Interpret [^' '] as a field ending in a blank
* Interpret [^ |\t] as a field ending in blank or tab char
* Interpret [^' '|\t] as a field ending in blank or tab char
* Interpret [^ |\t\n] as a field ending in blank, tabchar or end-of-line
*
*/
strcpy(workarea,"Bread milk eggs cheese tomatoes cookies \n");
i=sscanf(workarea," %[^' '|\t] %[^[' '|\t] %[^' '|\t] %[^' '|\t] %[^' '|\t] %[^' '|\t|\n] ",
field1,field2,field3,field4,field5,field6);
此掃描結果中包含 「麪包」,包含字段2 「奶」,...含 「曲奇」 字段6 FIELD1。在第一個到最後一個單詞之間,您可能會有一個或多個空格或製表符 以下cookie的結尾可能是三個空格,製表符或換行符中的一個,它們將被刪除而不屬於「cookies」。
- 1. 返回字符串輸入字符串
- 2. 輸入字符串
- 3. 輸入字符串
- 4. 輸入字符串
- 5. 從文件輸入字符串並比較輸入字符串
- 6. 輸入多個字符串數組
- 7. 輸入多個字符串C++
- 8. 多輸入一個字符串
- 9. 試圖把多個字符串輸入
- 10. 從字符輸入連接字符串
- 11. 試圖打印輸入字符串中有多少個字符
- 12. 如何將多字輸入讀入一個字符串?
- 13. 字符串錯誤輸入
- 14. Java輸入字符串
- 15. JSON輸入字符串
- 16. 輸入字符串選擇
- 17. 把輸入字符串JS
- 18. 輸入字符串錯誤
- 19. 模板輸入字符串
- 20. 只能輸入字符串
- 21. 驗證輸入字符串
- 22. C++字符串類輸入
- 23. 從輸入字符串
- 24. 獲取字符串輸入
- 25. 將字符串輸入ArrayList
- 26. 獨立字符串輸入
- 27. NumberFormatException輸入字符串:「15,7」
- 28. java.lang.NumberFormatException輸入字符串「」
- 29. 字符串輸入轉義
- 30. Matlab字符串輸入
看起來更像C++的問題,如果我錯了,糾正我? – DumbCoder 2010-08-24 09:31:11