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)進行一輪。
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)進行 ? ? { ? ? ? ? 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:
上面的輸入都是針對字符串來說的,而對于整型或浮點型數(shù)據(jù)來說,除了"\n"即回車以外,空格隔開也會自動結(jié)束一個數(shù)據(jù)的輸入。
造成這種區(qū)別的根本原因就是字符類型中原本就會有空格符,不能作為輸入結(jié)束的標志,而整型和浮點型可以。
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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。