C語言使用scanf連續(xù)輸入字符串出現(xiàn)的問題
#include<stdio.h> int main() { char a,b; scanf("%c",&a); scanf("%c",&b); printf("%c,%c",a,b); }
一段看上去很簡單的代碼,即使是C語言初學者也能看懂。
可是在運行的時候卻出現(xiàn)了問題:
①輸入a后按下回車
②用空格隔開之后再按下回車
相信和我一樣的大部分初學者,看著自己天衣無縫的代碼,百思不得其解。
讓我們先來看看,在百度百科中,對于scanf函數(shù)的解釋
在①中,我們只輸入了a和回車。而這時,回車便留在了緩沖區(qū)中,直接被下一個scanf所吸收。在②中,輸入了a、空格、b和回車,在這種情況下,我們輸入的空格則進入了緩沖區(qū)中,導致b無法被讀取,導致出現(xiàn)了問題。
解決方法
①在第二個%c前加上空格,來抵消之前輸入的空格/回車
#include<stdio.h> int main() { char a,b; scanf("%c",&a); scanf(" %c",&b); //在%c前加上一個空格 printf("%c,%c",a,b); }
②在第一個%c后面加上一個*c,忽略下一個讀入的字符
#include<stdio.h> int main() { char a,b; scanf("%c*c",&a); scanf("%c",&b); printf("%c,%c",a,b); }
③用fflush清空緩沖區(qū)
#include<stdio.h> int main() { char a,b; scanf("%c",&a); fflush(stdin); scanf("%c",&b); printf("%c,%c",a,b); }
④用getchar吸收字符
#include<stdio.h> int main() { char a,b; scanf("%c",&a); getchar(); scanf("%c",&b); printf("%c,%c",a,b); }
除方法①以外,其他三種方法不僅在使用scanf時有效,在使用getchar碰到類似問題的時候也有效,有興趣的讀者可以自行嘗試。
到此這篇關于C語言使用scanf連續(xù)輸入字符串出現(xiàn)的問題的文章就介紹到這了,更多相關C語言scanf連續(xù)輸入字符串內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Ubuntu20.04安裝使用jsoncpp、json-c庫的方法實例
這篇文章主要給大家介紹了關于Ubuntu20.04安裝使用jsoncpp、json-c庫的相關資料,文中通過代碼介紹的非常詳細,對大家的學習或者工作就有一定的參考借鑒價值,需要的朋友可以參考下2024-04-04C語言之結構體定義 typedef struct 用法詳解和用法小結
這篇文章主要介紹了C語言的結構體定義typedef struct用法詳解和用法小結,typedef是類型定義,typedef struct 是為了使用這個結構體方便,感興趣的同學可以參考閱讀2023-03-03