最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中g(shù)etchar和putchar的使用方法詳解

 更新時(shí)間:2023年08月07日 10:19:38   作者:庫庫的里昂  
我們知道scanf函數(shù)可以從鍵盤輸入信息,而printf則可以輸出信息,同樣地,getchar和putchar也有同樣的功能,下面我來給大家介紹putchar和getchar的使用方法,需要的朋友可以參考下

一、認(rèn)識getchar和putchar

getchar 是以為單位進(jìn)行存取的

當(dāng)用 getchar 進(jìn)行輸入時(shí),如果輸入的第一個(gè)字符為有效字符(即輸入是文件結(jié)束符 EOF ,Windows下為組合鍵 Ctrl+Z , Unix/Linux下為組合鍵 Ctrl+D )

那么只有當(dāng)最后一個(gè)輸入字符為換行符 '\n' (也可以是文件結(jié)束符 EOF , EOF 將在后面討論)時(shí), getchar 才會停止執(zhí)行,整個(gè)程序?qū)聢?zhí)行。

代碼示例:

while((c = getchar()) != EOF){
  putchar(c);
}

執(zhí)行程序,輸入:abc,然后回車

則程序就會去執(zhí)行 putchar(c) ,然后輸出abc,這個(gè)地方不要忘了,系統(tǒng)輸出的還有一個(gè)回車。然后可以繼續(xù)輸入,再次遇到換行符的時(shí)候,程序又會把那一行的輸入的字符輸出在終端上。

對于 getchar ,肯定很多初學(xué)的朋友會問, getchar 不是以字符為單位讀取的嗎?

那么,既然我輸入了第一個(gè)字符a,肯定滿足while循環(huán) (c = getchar()) != EOF)的條件呀,那么應(yīng)該執(zhí)行 putchar(c) 在終端輸出一個(gè)字符a。

不錯,我在用 getchar 的時(shí)候也是一直這么想的,但是程序就偏偏不著樣執(zhí)行,而是必需讀到一個(gè) 換行符 或者 文件結(jié)束符EOF 才進(jìn)行一次輸出。

對這個(gè)問題的一個(gè)解釋是:

在編寫C的時(shí)候,當(dāng)時(shí)并沒有所謂終端輸入的概念,所有的輸入實(shí)際上都是按照文件進(jìn)行讀取的,文件中一般都是以行為單位的。因此,只有遇到換行符,那么程序會認(rèn)為輸入結(jié)束,然后采取執(zhí)行程序的其他部分。

同時(shí),輸入是按照文件的方式存取的,那么要結(jié)束一個(gè)文件的輸入就需用到 EOF  (Enf Of File).。這也就是為什么 getchar 結(jié)束輸入退出時(shí)要用 EOF 的原因。

代碼示例:

#include <stdio.h>
int main()
{
  int c;
  c = getchar();
  while (c != EOF)
  {
     putchar();
       c= getchar(); 
  }
  return 0;
}

這里主要解釋下為什么要用 int 型來接受 getchar 函數(shù)。

很多時(shí)候,我們會寫這樣的兩行代碼:

char c;
c = getchar();

這樣就很有可能出現(xiàn)問題。

因?yàn)?strong> getchar 函數(shù)除了返回終端輸入的字符外,在遇到Ctrl+D(Linux下)即文件結(jié)束符EOF時(shí), getchar () 的返回 EOF ,這個(gè) EOF 在函數(shù)庫里一般定義為 -1 。

因此,在這種情況下, getchar 函數(shù)返回一個(gè)負(fù)值,把一個(gè)負(fù)值賦給一個(gè) char 型的變量是不正確的

二、例題

1.下面用一個(gè)題目來看其實(shí)如何獲取字符和輸出字符的

代碼示例:

#include <stdio.h> 
int main() 
{ 
      char c,d,e,f; 
      printf("please input two characters:\n"); 
      c=getchar(); 
      putchar(c); 
      putchar('\n'); 
      d=getchar(); 
      putchar(d); 
      putchar('\n'); 
      e=getchar(); 
      putchar(e); 
      putchar('\n'); 
      f=getchar(); 
      putchar(f); 
      putchar('\n'); 
      printf("c= %c\n",c); 
      printf("d= %c\n",d); 
      printf("e= %c\n",e); 
      printf("f= %c\n",f); 
} 

運(yùn)行后先輸入“12”,回車,再輸入“34”,回車。

運(yùn)行環(huán)境是VSCode2019

代碼結(jié)果:

下面具體解釋一下:

  • getchar 函數(shù)每次從緩沖區(qū)中得到一個(gè)字符, putchar 函數(shù)每次輸出一個(gè)字符。
  • 首先輸入了兩個(gè)字符12,然后回車,注意這時(shí)寫入緩存中的有3個(gè)字符: 1 , 2 , 回車 。
  • 程序中有四個(gè) getchar() ,于是 c='1' , d='2' , e='\n' 。
  • 這時(shí)運(yùn)行到 f=getchar() ;輸入緩存中的三個(gè)字符均被前三個(gè) getchar 獲取,這時(shí)需要用戶輸入,
  • 這里輸入了34
  • 于是 f='3' 4和后面的回車沒有被利用。
  • 這便是整個(gè)流程。

2.設(shè)計(jì)一個(gè)輸入密碼的程序

代碼示例:

#include <stdio.h>
int main()
{
	int password[100] = { 0 };
	printf("請輸入密碼:>");
	// 數(shù)組名是首元素地址,不用加&
	scanf("%d", password);
    getchar();
	printf("請確認(rèn)密碼(Y/N):>");
	char ch = getchar();
	if (ch == 'Y')
		printf("確認(rèn)成功\n");
	else if (ch == 'N')
		printf("確認(rèn)失敗\n");
	else
		printf("輸入錯誤\n");
	return 0;
}

運(yùn)行結(jié)果:

  •  這里的getchar()就是為了消除緩沖區(qū)。你以為到這里就結(jié)束了嗎?其實(shí)還沒有...
  • 假如現(xiàn)在問題復(fù)雜了,有的人可能會把密碼輸成123 456\n  (123和456中間是空格)

我們來看圖:

這時(shí)候我們可以寫一個(gè)while循環(huán)

#include <stdio.h>
int main()
{
	int password[100] = { 0 };
	printf("請輸入密碼:>");
	// 數(shù)組名是首元素地址,不用加&
	scanf("%d", password);
	//為了消除\n
	while (getchar() != '\n')
	{
		;
	}
	printf("請確認(rèn)密碼(Y/N):>");
	char ch = getchar();
	if (ch == 'Y')
		printf("確認(rèn)成功\n");
	else if (ch == 'N')
		printf("確認(rèn)失敗\n");
	else
		printf("輸入錯誤\n");
	return 0;
}

代碼結(jié)果:

總結(jié): 

getchar讀取了空格、空格是不是都不等于\n為真。進(jìn)入循環(huán)后啥也不干,就單純把它們“吃掉”,最后讀取到\n為假。跳出循環(huán)。 

以上便是getchar() putchar() 的一些基本用法

今天講了getcharputchar的使用方法,如有不對之處,請多多指正!

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

相關(guān)文章

  • C++中l(wèi)ist的使用場景詳解

    C++中l(wèi)ist的使用場景詳解

    這篇文章主要介紹了C++標(biāo)準(zhǔn)庫中的`std::list`容器,包括其內(nèi)部結(jié)構(gòu)、與其它容器的對比、核心使用場景、性能分析、特殊應(yīng)用場景、使用陷阱與最佳實(shí)踐,需要的朋友可以參考下
    2025-05-05
  • C語言 數(shù)據(jù)結(jié)構(gòu)中棧的實(shí)現(xiàn)代碼

    C語言 數(shù)據(jù)結(jié)構(gòu)中棧的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)中棧的實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • C++中多態(tài)的定義及實(shí)現(xiàn)詳解

    C++中多態(tài)的定義及實(shí)現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于C++中多態(tài)的定義及實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 嵌入式項(xiàng)目使用C語言結(jié)構(gòu)體位段特性實(shí)現(xiàn)斷言宏校驗(yàn)數(shù)據(jù)范圍有效性的方法

    嵌入式項(xiàng)目使用C語言結(jié)構(gòu)體位段特性實(shí)現(xiàn)斷言宏校驗(yàn)數(shù)據(jù)范圍有效性的方法

    今天小編就為大家分享一篇關(guān)于嵌入式項(xiàng)目使用C語言結(jié)構(gòu)體位段特性實(shí)現(xiàn)斷言宏校驗(yàn)數(shù)據(jù)范圍有效性的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • VSCode與Keil聯(lián)合開發(fā)STM32的流程

    VSCode與Keil聯(lián)合開發(fā)STM32的流程

    這篇文章主要介紹了VSCode與Keil聯(lián)合開發(fā)STM32的流程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 概述C++中的 public protected private friend關(guān)鍵字的用法

    概述C++中的 public protected private friend關(guān)鍵字的用法

    這篇文章簡要概述了C++中的 public protected private friend關(guān)鍵字的用法,非常不錯,具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • C++ const和指針詳情

    C++ const和指針詳情

    這篇文章主要介紹了C++ const和指針,關(guān)于使用const來修飾指針,有兩種不同的方式。第一種是讓指針指向一個(gè)常量對象,這樣可以防止使用該指針進(jìn)行修改指向的值。第二種則是將指針本身聲明為常量,可以防止改變指針指向的位置,下面來看看文章的詳細(xì)內(nèi)容
    2021-11-11
  • C++實(shí)現(xiàn)酒店管理系統(tǒng)

    C++實(shí)現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++ STL標(biāo)準(zhǔn)庫std::vector的使用詳解

    C++ STL標(biāo)準(zhǔn)庫std::vector的使用詳解

    vector 是表示可以改變大小的數(shù)組的序列容器,本文主要介紹了C++ STL標(biāo)準(zhǔn)庫std::vector的使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言實(shí)現(xiàn)簡單通訊錄系統(tǒng)

    C語言實(shí)現(xiàn)簡單通訊錄系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單通訊錄系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

中牟县| 屏南县| 乐安县| 泸水县| 东港市| 长宁区| 龙海市| 通州市| 无锡市| 娄烦县| 土默特左旗| 佛山市| 汶上县| 天气| 长顺县| 华亭县| 高陵县| 都昌县| 天津市| 金阳县| 永丰县| 马尔康县| 吉安县| 略阳县| 潞城市| 湘乡市| 那曲县| 青阳县| 威远县| 锡林郭勒盟| 疏附县| 香河县| 内黄县| 静宁县| 贡山| 文成县| 内黄县| 德庆县| 桓仁| 文成县| 林甸县|