實(shí)例
1.清空緩沖區(qū)
下面一段把代碼是輸入一段密碼,并且還要用getchar()接受是否確認(rèn)密碼的選項(xiàng):
int main()
{
char password[20] = { 0 };
int ch = 0;
printf("輸入密碼\\n");
scanf("%s", password);
printf("請(qǐng)確認(rèn)密碼(Y/N):");
ch = getchar();
if (ch == 'Y')
{
printf("成功\\n");
}
else
{
printf("失敗\\n");
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
我們輸入一端密碼后,還未輸入Y或N,代碼就自動(dòng)打印“失敗”并退出運(yùn)行
這其實(shí)還是scamf無(wú)法讀取回車在作祟
當(dāng)我們輸入1234567后,此時(shí)在輸入緩沖區(qū)中其實(shí)存的是:1234567\\n
scanf("%s", password);語(yǔ)句讀取字符串,因?yàn)樗鼰o(wú)法讀取\\n所以此時(shí)scanf只會(huì)讀取走1234567,在輸入緩沖區(qū)中還有\(zhòng)\n
所以在之后的ch = getchar();中,就會(huì)讀取\\n,不等于Y,所以會(huì)打印失敗
所以,要把緩沖中的 \\n 消化掉,也就是清空緩沖區(qū)
只要,再寫一個(gè)getchar()語(yǔ)句,將\\n讀取走,就可以了
代碼如下:
int main()
{
char password[20] = { 0 };
int ch = 0;
printf("輸入密碼\\n");
scanf("%s", password);
printf("請(qǐng)確認(rèn)密碼(Y/N):");
getchar(); //清空緩沖區(qū)
ch = getchar();
if (ch == 'Y')
{
printf("成功\\n");
}
else
{
printf("失敗\\n");
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
運(yùn)行成功

2.字符串中有空格
以下代碼是輸入一個(gè)字符串再輸出:
int main()
{
char str[20] = { 0 };
scanf("%s", str);
printf("%s", str);
return 0;
}
1
2
3
4
5
6
7
如果輸入的字符串是連續(xù)的,也就是沒有空格的,此代碼正常運(yùn)行
如果輸入的字符串是有字符的,就會(huì)出現(xiàn)錯(cuò)誤

錯(cuò)誤的原因還是scanf無(wú)法讀取緩沖區(qū)中的空格,所以接下來(lái)要使用getchar去讀取字符串
因?yàn)檩斎氲囊欢巫址欢〞?huì)是以\\n為結(jié)尾
所以在前面的while ((ch = getchar()) != 'EOF)改成while ((ch = getchar()) != '\\n')即可,只要不遇到\\n就一直讀取下去
代碼如下:
int main()
{
char str[20] = { 0 };
char ch = 0;
while ((ch = getchar()) != '\\n')
{
putchar(ch);
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
運(yùn)行結(jié)果:

原文鏈接:https://blog.csdn.net/weixin_64116522/article/details/127956631
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4423瀏覽量
67880 -
代碼
+關(guān)注
關(guān)注
30文章
4977瀏覽量
74425
發(fā)布評(píng)論請(qǐng)先 登錄
STM32CubeIde生成的工程,使用printf函數(shù)沒有調(diào)用_write和__io_putchar函數(shù),為什么?
重定向了fputc及putchar函數(shù),但printf沒有輸出,為什么?
是否可以在調(diào)試模式下使用''printf''或''putchar''函數(shù)
淺談keil中庫(kù)函數(shù)和寄存器關(guān)系
網(wǎng)絡(luò)函數(shù)的習(xí)題與詳解詳細(xì)說(shuō)明
Linux內(nèi)核GPIO操作函數(shù)的詳解分析
Android開發(fā)手冊(cè)API函數(shù)詳解資料免費(fèi)下載
51單片機(jī)(STC15W408AS)映射printf函數(shù) 串口收發(fā)實(shí)現(xiàn)
如何使用printf函數(shù)將字符串打印到串口
putchar()函數(shù)詳解
評(píng)論