0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

putchar()函數(shù)詳解

麥辣雞腿堡 ? 來源:CSDN博客 ? 作者:Jambo! ? 2023-01-22 16:59 ? 次閱讀

實(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無法讀取回車在作祟

當(dāng)我們輸入1234567后,此時(shí)在輸入緩沖區(qū)中其實(shí)存的是:1234567\\n

scanf("%s", password);語句讀取字符串,因?yàn)樗鼰o法讀取\\n所以此時(shí)scanf只會(huì)讀取走1234567,在輸入緩沖區(qū)中還有\(zhòng)\n

所以在之后的ch = getchar();中,就會(huì)讀取\\n,不等于Y,所以會(huì)打印失敗

所以,要把緩沖中的 \\n 消化掉,也就是清空緩沖區(qū)

只要,再寫一個(gè)getchar()語句,將\\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)行成功

image.png

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ò)誤

image.png

錯(cuò)誤的原因還是scanf無法讀取緩沖區(qū)中的空格,所以接下來要使用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é)果:

image.png

原文鏈接:https://blog.csdn.net/weixin_64116522/article/details/127956631

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4344

    瀏覽量

    62820
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4813

    瀏覽量

    68835
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32CubeIde生成的工程,使用printf函數(shù)沒有調(diào)用_write和__io_putchar函數(shù),為什么?

    (int ch) 函數(shù),發(fā)現(xiàn)沒有串口沒有輸出,使用SWD進(jìn)行debug,并對(duì)syscalls.c中的_write函數(shù)以及重寫的io_putchar函數(shù)打了斷點(diǎn),結(jié)果printf執(zhí)行后,
    發(fā)表于 05-24 06:13

    重定向了fputc及putchar函數(shù),但printf沒有輸出,為什么?

    重定向了fputc及putchar函數(shù),但printf沒有輸出 刪除了drivers/drv_uart.c drv_uart.h 刪除了文件rt-thread\\components
    發(fā)表于 07-18 07:44

    是否可以在調(diào)試模式下使用''printf''或''putchar''函數(shù)

    大家好, 關(guān)于ST VD和STM8的一個(gè)小問題。是否可以在調(diào)試模式下使用''printf''或''putchar''函數(shù)在控制臺(tái)中顯示消息或類似的東西? (我的意思是不使用USART) 我
    發(fā)表于 12-06 16:16

    printf/fputc/putchar和vsprintf怎么使用?

    printf/fputc/putchar和vsprintf怎么使用?
    發(fā)表于 12-02 06:09

    PICC庫函數(shù)詳解

    PICC庫函數(shù)詳解
    發(fā)表于 04-18 20:13 ?132次下載

    Android開發(fā)手冊(cè)—API函數(shù)詳解

    Android開發(fā)手冊(cè)—API函數(shù)詳解
    發(fā)表于 10-17 09:01 ?13次下載
    Android開發(fā)手冊(cè)—API<b class='flag-5'>函數(shù)</b><b class='flag-5'>詳解</b>

    基于Android開發(fā)手冊(cè)—API函數(shù)詳解

    基于Android開發(fā)手冊(cè)—API函數(shù)詳解
    發(fā)表于 10-24 09:06 ?18次下載
    基于Android開發(fā)手冊(cè)—API<b class='flag-5'>函數(shù)</b><b class='flag-5'>詳解</b>

    淺談keil中庫函數(shù)和寄存器關(guān)系

    在一個(gè)芯片系統(tǒng)里,uart的驅(qū)動(dòng)是廠商自己寫好的,那他們是怎么關(guān)聯(lián)printf到uart的呢?有人說,printf最終是調(diào)用了putchar,我搜索了源碼,沒有這個(gè)函數(shù),估計(jì)是開發(fā)工具,像KeilC
    發(fā)表于 06-22 08:19 ?2978次閱讀
    淺談keil中庫<b class='flag-5'>函數(shù)</b>和寄存器關(guān)系

    網(wǎng)絡(luò)函數(shù)的習(xí)題與詳解詳細(xì)說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是網(wǎng)絡(luò)函數(shù)的習(xí)題與詳解詳細(xì)說明。
    發(fā)表于 09-28 08:00 ?0次下載
    網(wǎng)絡(luò)<b class='flag-5'>函數(shù)</b>的習(xí)題與<b class='flag-5'>詳解</b>詳細(xì)說明

    Linux內(nèi)核GPIO操作函數(shù)詳解分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux內(nèi)核GPIO操作函數(shù)詳解分析免費(fèi)下載。
    發(fā)表于 01-22 16:58 ?28次下載

    Android開發(fā)手冊(cè)API函數(shù)詳解資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Android開發(fā)手冊(cè)API函數(shù)詳解資料免費(fèi)下載。
    發(fā)表于 02-22 08:00 ?0次下載

    51單片機(jī)(STC15W408AS)映射printf函數(shù) 串口收發(fā)實(shí)現(xiàn)

    前提:實(shí)現(xiàn)串口收發(fā)數(shù)據(jù)/************************************************* *函數(shù)名稱:char putchar(char c
    發(fā)表于 11-20 17:51 ?10次下載
    51單片機(jī)(STC15W408AS)映射printf<b class='flag-5'>函數(shù)</b> 串口收發(fā)實(shí)現(xiàn)

    如何使用printf函數(shù)將字符串打印到串口

    如何使用printf函數(shù)將字符串打印到串口該函數(shù)名已經(jīng)在標(biāo)準(zhǔn)輸入輸出庫頭文 件 stdio.h 中定義,原型為 int fputc(int ch, FILE *f)。在usart.c中添加
    發(fā)表于 01-12 18:53 ?1次下載
    如何使用printf<b class='flag-5'>函數(shù)</b>將字符串打印到串口

    C語言putchar函數(shù)介紹

    想從計(jì)算機(jī)向顯示器輸出一個(gè)字符,可以調(diào)用系統(tǒng)函數(shù)庫中的putchar函數(shù)
    的頭像 發(fā)表于 03-09 11:02 ?4103次閱讀

    STM32庫函數(shù)SystemInit()詳解

    STM32庫函數(shù)SystemInit()詳解
    的頭像 發(fā)表于 09-18 15:45 ?4184次閱讀
    STM32庫<b class='flag-5'>函數(shù)</b>SystemInit()<b class='flag-5'>詳解</b>