記錄一下最近遇到的一個C語言問題
scanf和循環(huán)錄入時空白字符影響程序執(zhí)行
scanf("%c",&c);
問題:
在while循環(huán)錄入時,換行符被接收導致多循環(huán)一次
在C語言中,空白字符是指空格、制表符、換行符等不可見的字符,它們通常在輸入和輸出時被忽略,只用于分隔其他字符。在輸入函數(shù)如scanf()中,如果輸入緩沖區(qū)中有空白字符,需要特殊處理,以避免對程序執(zhí)行產(chǎn)生影響。
當使用scanf()函數(shù)等輸入函數(shù)從標準輸入中讀取數(shù)據(jù)時,如果輸入緩沖區(qū)中有換行符或其他空白字符,這些字符可能會被讀取并留在緩沖區(qū)中,在下一次讀取時被誤認為是有效的輸入數(shù)據(jù),導致程序出現(xiàn)錯誤。
在while循環(huán)錄入時,如果輸入緩沖區(qū)中有換行符或其他空白字符,這些字符可能會被讀取到并導致循環(huán)多執(zhí)行一次。為了避免這種問題,可以在讀取字符或其他數(shù)據(jù)之前先清空輸入緩沖區(qū),例如使用getchar()函數(shù)或者在scanf()函數(shù)中使用格式化字符串來跳過空白字符。
解決方案:
scanf(" %c", &c);
這個格式化字符串中的空格字符會在讀取輸入之前跳過所有的空白字符,從而清空輸入緩沖區(qū)。