C語(yǔ)言中的多行輸入問(wèn)題及說(shuō)明
??途W(wǎng)和LeetCode的競(jìng)賽題中經(jīng)常會(huì)遇到多行輸入,以前不熟悉這種寫(xiě)程序的方式,初次接觸時(shí)輸入值會(huì)有很多問(wèn)題。
多行輸入有下面這些常用方法:
一、未明確具體輸入行數(shù)
沒(méi)有確定的輸入行數(shù)時(shí),一般要采用Ctrl+Z結(jié)束輸入,系統(tǒng)會(huì)自動(dòng)輸入這些,我們要做的是設(shè)置好循環(huán)條件即可。
具體是每次輸入都產(chǎn)生結(jié)果還是所有輸入完以后再輸出結(jié)果要看題目要求。
如:輸入多個(gè)字符串,保存在二維數(shù)組中,可以采用以下兩種方式:
1、~scanf方式
? ?char str[10][10];//定義二維數(shù)組,保存多個(gè)字符串 ? ? int i = 0; ? ? while (~scanf("%s", str[i])) ? ? { ? ? ? ? i++; ? ? }
這里每次敲下回車(chē)會(huì)結(jié)束一次輸入,循環(huán)進(jìn)行一輪。
scanf函數(shù)的返回值為正確輸入的值的個(gè)數(shù),如過(guò)沒(méi)有正確輸入,scanf返回值即為-1,對(duì)-1按位取反值為0,用于退出循環(huán)。
Windows平臺(tái),用Ctrl+Z來(lái)表示輸入結(jié)束,有些編譯器需要連續(xù)按兩次或者三次Ctrl+Z,且每次都在行首。
2、EOF
End of file,文件結(jié)束符
char str[10][10];//定義二維數(shù)組,保存多個(gè)字符串 ? ? int i = 0; ? ? while (scanf("%s", str[i])!=EOF) ? ? { ? ? ? ? i++; ? ? }
3、根據(jù)輸入元素的個(gè)數(shù)
char str[10][10];//定義二維數(shù)組,保存多個(gè)字符串 ? ? int i = 0; ? ? while (scanf("%s", str[i])==1)//表示輸入一個(gè)元素時(shí),循環(huán)進(jìn)行 ? ? { ? ? ? ? i++; ? ? }
這里的’1’代表的是要輸入的元素的個(gè)數(shù),如果輸入元素個(gè)數(shù)不為1則循環(huán)結(jié)束。
二、已知具體輸入行數(shù)
知道輸入行數(shù)時(shí),循環(huán)條件設(shè)為具體行數(shù)即可
? char str1[10][10];//定義二維數(shù)組,保存多個(gè)字符串 ? ? ? ? int num = 10; ? ? ? ? int i = 0; ? ? while (num--) ? ? { ? ? ? ? scanf("%s", &str1[i]); ? ? ? ? i++; ? ? }
ps:
上面的輸入都是針對(duì)字符串來(lái)說(shuō)的,而對(duì)于整型或浮點(diǎn)型數(shù)據(jù)來(lái)說(shuō),除了"\n"即回車(chē)以外,空格隔開(kāi)也會(huì)自動(dòng)結(jié)束一個(gè)數(shù)據(jù)的輸入。
造成這種區(qū)別的根本原因就是字符類(lèi)型中原本就會(huì)有空格符,不能作為輸入結(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]); ?? ?}
輸入和輸出:
無(wú)論使用空格還是換行符隔開(kāi),都不影響最終的結(jié)果。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言開(kāi)源庫(kù)iniparser解析ini文件的方法
INI(Initialization?File)文件是一種簡(jiǎn)單直觀的數(shù)據(jù)存儲(chǔ)格式,常用于配置應(yīng)用程序的初始化設(shè)置,使用?iniparser?庫(kù)的應(yīng)用程序可以很方便地讀取和解析INI文件中的配置信息,大大簡(jiǎn)化了對(duì)配置文件的處理工作,降低了程序的開(kāi)發(fā)復(fù)雜度,感興趣的的朋友跟隨小編一起看看吧2024-04-04C 語(yǔ)言編寫(xiě)一個(gè)計(jì)算器界面(可視化界面和多功能)
今天給大家分享一個(gè)計(jì)算器功能,主要功能有加法減法乘除法求余功能,用戶(hù)可以在主菜單選擇需要計(jì)算的功能,接下來(lái)根據(jù)用戶(hù)輸入的數(shù)字進(jìn)行計(jì)算輸出結(jié)果,喜歡的朋友拿去用吧2021-06-06VC創(chuàng)建DLL動(dòng)態(tài)鏈接庫(kù)的方法
這篇文章主要介紹了VC創(chuàng)建DLL動(dòng)態(tài)鏈接庫(kù)的方法,實(shí)例分析VC創(chuàng)建動(dòng)態(tài)鏈接庫(kù)的完整步驟,需要的朋友可以參考下2015-05-05opencv+arduino實(shí)現(xiàn)物體點(diǎn)追蹤效果
這篇文章主要為大家詳細(xì)介紹了opencv+arduino實(shí)現(xiàn)物體點(diǎn)追蹤效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01C 語(yǔ)言restrict 關(guān)鍵字的使用淺談
C 語(yǔ)言restrict 關(guān)鍵字的使用淺談,需要的朋友可以參考一下2013-04-04示例詳解C++語(yǔ)言中的命名空間 (namespace)
C++名字空間是一種描述邏輯分組的機(jī)制,也就是說(shuō),如果有一些聲明按照某種準(zhǔn)則在邏輯上屬于同一個(gè)模塊,就可以將它們放在同一個(gè)名字空間,以表明這個(gè)事實(shí),這篇文章主要給大家介紹了關(guān)于C++語(yǔ)言中命名空間 (namespace)的相關(guān)資料,需要的朋友可以參考下2021-08-08