欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中getchar()與putchar()函數(shù)詳解

 更新時間:2023年01月08日 09:43:32   作者:Jambo!  
本文主要介紹了C語言中getchar()與putchar()函數(shù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

getchar()與putchar()getchar()getchar()的一個重要機制getchar()與scanf()區(qū)別 putchar() 實例1.清空緩沖區(qū)2.字符串中有空格

getchar()與putchar()

getcharputchar其實最基本的作用就是用getchar讀取一個字符,再用putchar輸出一個字符

基本用法:

#include <stdio.h>

int main()
{
	char c = 0;
	c = getchar();
	putchar(c);
	return 0;
}

運行結果:

在這里插入圖片描述

輸入一個a,然后再打印a

這里getcharputcharscanfprintf的作用基本一致,只不過getchar,putchar只對字符類型操作,而scanf,printf對指定的類型進行操作

getchar()

getchar的定義:
int getchar(void)

  • 返回類型是int值,所以返回的是字符的ASCII碼
  • 參數(shù)列表中是void,所以不必在括號中傳參數(shù)
  • 如果getchar讀取失敗,就會返回EOF

getchar()的一個重要機制

getchar函數(shù)的作用與鍵盤間,存在一個輸入緩沖區(qū),從鍵盤輸入的內(nèi)容會存在這個緩沖中,接下來getchar函數(shù)會從緩沖區(qū)中取走內(nèi)容

在這里插入圖片描述

因為getchar是對于字符進行操作,所以每次執(zhí)行getchar都會取走輸入緩沖區(qū)中一個字符
并且getchar還會取走回車也就是\n與空格

我們用下面的代碼進行對輸入緩沖區(qū)機制的測試:

int main()
{
	char ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}
	return 0;
}

當輸入一個字符a時,同時我們會按下回車,此時輸入緩沖區(qū)中就有兩個字符:a\n

在這里插入圖片描述

首先,getchar()會先取走字符a,然后通過putchar打印出來

在這里插入圖片描述

接著循環(huán),getchar()取走字符\n,然后通過putchar打印出來,所以在輸出中光標不在輸出的a的后面,而在a的下一行

在這里插入圖片描述

接著,輸入緩沖區(qū)中以無內(nèi)容,getchar()就會讀到EOF,退出循環(huán)

還可以用以下代碼更進一步驗證getchar()對于回車的讀?。?/p>

int main()
{
	int i = 0;
	char ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
		i++;
	}
	printf("%d", i);
	return 0;
}

輸入字符ab,這里實際上是輸入a后,按一次回車,輸入b后,按一次回車,所以輸入緩沖區(qū)中的內(nèi)容為:a\nb\n,所以getchar()會讀取四次,所以i的值為會是4

在這里插入圖片描述

getchar()與scanf()區(qū)別

*getcharscanf的主要區(qū)別是getchar能讀取輸入緩沖區(qū)中的一切字符類型,包括空格與回車,而scanf()不能讀取空格與回車

putchar()

putchar的定義:

int putchar ( int character );
  • 傳的參數(shù)是要輸出的字符變量
  • putchar的用法與printf("%c",character)一致,都是輸出一個字符

實例

1.清空緩沖區(qū)

下面一段把代碼是輸入一段密碼,并且還要用getchar()接受是否確認密碼的選項:

int main()
{
	char password[20] = { 0 };
	int ch = 0;
	printf("輸入密碼\n");
	scanf("%s", password);
	printf("請確認密碼(Y/N):");
	ch = getchar();
	if (ch == 'Y')
	{
		printf("成功\n");
	}
	else
	{
		printf("失敗\n");
	}
	return 0;
}

我們輸入一端密碼后,還未輸入Y或N,代碼就自動打印“失敗”并退出運行

在這里插入圖片描述

這其實還是scamf無法讀取回車在作祟
當我們輸入1234567后,此時在輸入緩沖區(qū)中其實存的是:1234567\n

請?zhí)砑訄D片描述

scanf("%s", password);語句讀取字符串,因為它無法讀取\n所以此時scanf只會讀取走1234567,在輸入緩沖區(qū)中還有\n

請?zhí)砑訄D片描述

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

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

只要,再寫一個getchar()語句,將\n讀取走,就可以了

代碼如下:

int main()
{
	char password[20] = { 0 };
	int ch = 0;
	printf("輸入密碼\n");
	scanf("%s", password);
	printf("請確認密碼(Y/N):");
	getchar();   //清空緩沖區(qū)
	ch = getchar();
	if (ch == 'Y')
	{
		printf("成功\n");
	}
	else
	{
		printf("失敗\n");
	}
	return 0;
}

運行成功

在這里插入圖片描述

2.字符串中有空格

以下代碼是輸入一個字符串再輸出:

int main()
{
	char str[20] = { 0 };
	scanf("%s", str);
	printf("%s", str);
	return 0;
}

如果輸入的字符串是連續(xù)的,也就是沒有空格的,此代碼正常運行

在這里插入圖片描述

如果輸入的字符串是有字符的,就會出現(xiàn)錯誤

在這里插入圖片描述

錯誤的原因還是scanf無法讀取緩沖區(qū)中的空格,所以接下來要使用getchar去讀取字符串

因為輸入的一段字符串一定會是以\n為結尾

在這里插入圖片描述

所以在前面的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;
}

運行結果:

在這里插入圖片描述

請?zhí)砑訄D片描述

 到此這篇關于C語言中getchar()與putchar()函數(shù)詳解的文章就介紹到這了,更多相關C語言 getchar()與putchar()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言中數(shù)據(jù)的存儲詳解

    C語言中數(shù)據(jù)的存儲詳解

    這篇文章主要為大家介紹了C語言中數(shù)據(jù)的存儲,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11
  • 詳解C++作用域與生命周期

    詳解C++作用域與生命周期

    這篇文章主要介紹了C++作用域與生命周期的相關資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下
    2020-08-08
  • C++詳解鏈棧的實現(xiàn)

    C++詳解鏈棧的實現(xiàn)

    今天我們學習的是鏈棧,也就是說棧的鏈式結構,我們運用順序鏈的方式來實現(xiàn)。首先呢,鏈棧是不存在存儲空間滿的情況的,所以可以說它是個無底洞,然而我們之前學的順序棧是有額定空間的
    2022-06-06
  • C語言中調(diào)用匯編語言詳解

    C語言中調(diào)用匯編語言詳解

    這篇文章主要介紹了C語言中調(diào)用匯編語言,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-10-10
  • C++運算符重載限制介紹

    C++運算符重載限制介紹

    這篇文章主要介紹了C++運算符重載限制,關于運算符的重載并不是隨心所欲的。C++給出了一些限制,從而保證了規(guī)范,以及程序運行的準確性,下面來了解C++運算符重載限制的詳細內(nèi)容吧,需要的朋友也可以參考一下
    2022-01-01
  • C++圖解單向鏈表類模板和iterator迭代器類模版詳解

    C++圖解單向鏈表類模板和iterator迭代器類模版詳解

    這篇文章主要為大家詳細介紹了C++圖解單向鏈表類模板和iterator迭代器類模版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 深入理解C++的多態(tài)性

    深入理解C++的多態(tài)性

    本篇文章是對C++的多態(tài)性進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++類中變量也可以是引用的代碼實例

    C++類中變量也可以是引用的代碼實例

    今天小編就為大家分享一篇關于C++類中變量也可以是引用的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C++ OpenGL實現(xiàn)三角形的繪制

    C++ OpenGL實現(xiàn)三角形的繪制

    這篇文章主要主要為大家詳細介紹了如何利用C++和OpenGL實現(xiàn)三角形的繪制,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手嘗試一下
    2022-06-06
  • C語言之函數(shù)遞歸的實現(xiàn)

    C語言之函數(shù)遞歸的實現(xiàn)

    本文主要介紹了C語言之函數(shù)遞歸的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07

最新評論