C語言中的多行輸入問題及說明
??途W(wǎng)和LeetCode的競賽題中經(jīng)常會遇到多行輸入,以前不熟悉這種寫程序的方式,初次接觸時輸入值會有很多問題。
多行輸入有下面這些常用方法:
一、未明確具體輸入行數(shù)
沒有確定的輸入行數(shù)時,一般要采用Ctrl+Z結(jié)束輸入,系統(tǒng)會自動輸入這些,我們要做的是設(shè)置好循環(huán)條件即可。
具體是每次輸入都產(chǎn)生結(jié)果還是所有輸入完以后再輸出結(jié)果要看題目要求。
如:輸入多個字符串,保存在二維數(shù)組中,可以采用以下兩種方式:
1、~scanf方式
? ?char str[10][10];//定義二維數(shù)組,保存多個字符串
? ? int i = 0;
? ? while (~scanf("%s", str[i]))
? ? {
? ? ? ? i++;
? ? }這里每次敲下回車會結(jié)束一次輸入,循環(huán)進(jìn)行一輪。
scanf函數(shù)的返回值為正確輸入的值的個數(shù),如過沒有正確輸入,scanf返回值即為-1,對-1按位取反值為0,用于退出循環(huán)。
Windows平臺,用Ctrl+Z來表示輸入結(jié)束,有些編譯器需要連續(xù)按兩次或者三次Ctrl+Z,且每次都在行首。
2、EOF
End of file,文件結(jié)束符
char str[10][10];//定義二維數(shù)組,保存多個字符串
? ? int i = 0;
? ? while (scanf("%s", str[i])!=EOF)
? ? {
? ? ? ? i++;
? ? }3、根據(jù)輸入元素的個數(shù)
char str[10][10];//定義二維數(shù)組,保存多個字符串
? ? int i = 0;
? ? while (scanf("%s", str[i])==1)//表示輸入一個元素時,循環(huán)進(jìn)行
? ? {
? ? ? ? i++;
? ? }這里的’1’代表的是要輸入的元素的個數(shù),如果輸入元素個數(shù)不為1則循環(huán)結(jié)束。
二、已知具體輸入行數(shù)
知道輸入行數(shù)時,循環(huán)條件設(shè)為具體行數(shù)即可
? char str1[10][10];//定義二維數(shù)組,保存多個字符串
? ? ? ? int num = 10;
? ? ? ? int i = 0;
? ? while (num--)
? ? {
? ? ? ? scanf("%s", &str1[i]);
? ? ? ? i++;
? ? }ps:
上面的輸入都是針對字符串來說的,而對于整型或浮點(diǎn)型數(shù)據(jù)來說,除了"\n"即回車以外,空格隔開也會自動結(jié)束一個數(shù)據(jù)的輸入。
造成這種區(qū)別的根本原因就是字符類型中原本就會有空格符,不能作為輸入結(jié)束的標(biāo)志,而整型和浮點(diǎn)型可以。
int N = 0;
?? ?scanf("%d", &N);
?? ?for (int i = 1; i <= N; i++)
?? ?{
?? ??? ?scanf("%d %d %d", &first[i], &second[i], &third[i]);
?? ??? ?printf("%d %d %d", first[i], second[i], third[i]);
?? ?}輸入和輸出:

無論使用空格還是換行符隔開,都不影響最終的結(jié)果。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
opencv+arduino實(shí)現(xiàn)物體點(diǎn)追蹤效果
這篇文章主要為大家詳細(xì)介紹了opencv+arduino實(shí)現(xiàn)物體點(diǎn)追蹤效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01

