解決C語(yǔ)言輸入單個(gè)字符屏蔽回車(chē)符的問(wèn)題
C語(yǔ)言的scanf()函數(shù)在接收輸入單個(gè)字符時(shí)會(huì)把上一次輸入的回車(chē)符號(hào)當(dāng)做這次輸入的字符,造成無(wú)法正確的輸入字符數(shù)據(jù)。這恐怕是初學(xué)C的童鞋門(mén)遇到的最頭疼的問(wèn)題了。
今天給大家提供四種解決方法供借鑒。
1、在scanf()中使用'\n'屏蔽回車(chē)符號(hào)。
scanf("%d\n",&n); //使用'\n'過(guò)濾回車(chē)
scanf("%c",&c);
2、在scanf()格式串最前面添加空格,屏蔽回車(chē)字符
scanf("%d",&n);
scanf(" %c",&c); //%c前面加空格,過(guò)濾回車(chē)
3、在接收字符前,使用getchar()來(lái)讀取一次回車(chē)符號(hào)
scanf("%d",&n);
getchar(); //專(zhuān)門(mén)用來(lái)讀取上次輸入的回車(chē)符號(hào)
scanf("%c",&c);
4、在接收字符前,使用fflush()清空輸入流中緩沖區(qū)中的內(nèi)容
scanf("%d",&n)
fflush(stdin); //清空輸入流緩沖區(qū)的字符,注意必須引入#include <stdlib.h>頭文件
scanf("%c",&c);
好了,以后再也不用為這個(gè)問(wèn)題煩惱了.....
補(bǔ)充知識(shí):C語(yǔ)言中使用scanf()對(duì)字符(串)進(jìn)行輸入的問(wèn)題
1. 輸入字符串
#include<stdio.h>
int main() {
int a;
char s1[100];
char s2[100];
scanf("%d", &a);
scanf("%s", s1);
scanf("%s", s2);
printf("a = %d\n", a);
printf("s1 = %s\n", s1);
printf("s2 = %s\n", s2);
return 0;
}
輸入
2019 hello world
輸出
a = 2019 s1 = hello s2 = world
沒(méi)有問(wèn)題,因?yàn)閟canf("%s")遇到換行符會(huì)自動(dòng)跳過(guò)
2.輸入字符
#include<stdio.h>
int main() {
int a;
char s1;
char s2;
scanf("%d", &a);
scanf("%c", &s1);
scanf("%c", &s2);
printf("a = %d\n", a);
printf("s1 = %c\n", s1);
printf("s2 = %c\n", s2);
return 0;
}
輸入
2019 A B
輸出
a = 2019 s1 = s2 = A
可以看到s1將2019后面的回車(chē)符'\n'吸收了,原因是scanf("%c")在讀取單個(gè)字符時(shí),空格和回車(chē)都被視為單個(gè)字符。
解決辦法
使用getchar()吸收掉多余的回車(chē)
#include<stdio.h>
int main() {
int a;
char s1;
char s2;
scanf("%d", &a);
getchar(); // 吸收"\n"
scanf("%c", &s1);
getchar(); // 吸收"\n"
scanf("%c", &s2);
printf("a = %d\n", a);
printf("s1 = %c\n", s1);
printf("s2 = %c\n", s2);
return 0;
}
在格式串中過(guò)濾掉回車(chē)
#include<stdio.h>
int main() {
int a;
char s1;
char s2;
scanf("%d\n", &a); // 過(guò)濾掉回車(chē)
scanf("%c\n", &s1);
scanf("%c", &s2);
printf("a = %d\n", a);
printf("s1 = %c\n", s1);
printf("s2 = %c\n", s2);
return 0;
}
以上這篇解決C語(yǔ)言輸入單個(gè)字符屏蔽回車(chē)符的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何利用C語(yǔ)言實(shí)現(xiàn)最簡(jiǎn)單的HTTP服務(wù)器詳解
這篇文章主要給大家介紹了關(guān)于如何利用C語(yǔ)言實(shí)現(xiàn)最簡(jiǎn)單的HTTP服務(wù)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
C語(yǔ)言實(shí)現(xiàn)掃雷游戲(可以自動(dòng)展開(kāi))
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷游戲,可以自動(dòng)展開(kāi),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
C語(yǔ)言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要介紹了C語(yǔ)言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
C++?OpenCV裁剪圖片時(shí)發(fā)生報(bào)錯(cuò)的解決方式
在圖像處理中,我們經(jīng)常根據(jù)需要截取圖像中某一區(qū)域做處理,下面這篇文章主要給大家介紹了關(guān)于C++?OpenCV裁剪圖片時(shí)發(fā)生報(bào)錯(cuò)的解決方式,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07

