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

C語(yǔ)言輸入一個(gè)字符串的方法有哪些

 更新時(shí)間:2023年06月06日 15:28:10   作者:Jambo!  
字符串輸入是C語(yǔ)言編程中非常重要的部分,其中scanf函數(shù)是一種廣泛使用的輸入字符串的方法,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言輸入一個(gè)字符串的方法有哪些的相關(guān)資料,需要的朋友可以參考下

用scanf輸入字符串(有限制)

整個(gè)字符串處理

scanf()printf()函數(shù)中,%s指的就是字符串
所以我們就可以使用scanf("%s",str)printf("%s",str)從鍵盤處讀取字符串并將字符串打印出來(lái)

代碼如下:

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

這里要注意的一點(diǎn)是:在scanf函數(shù)中,后面的參數(shù)必須是一個(gè)地址,如輸入一個(gè)整形變量:scamf("%d",&a),都需要進(jìn)行&取地址操作
但是數(shù)組名就已經(jīng)是地址了(詳解請(qǐng)點(diǎn)擊觀看我的一篇關(guān)于數(shù)組名到底是什么的文章)
所以直接用數(shù)組名即可,不用進(jìn)行取地址

如果我們輸入一個(gè)連續(xù)的字符串如:abcde,這段代碼會(huì)正常運(yùn)行

然而,如果輸入一個(gè)非連續(xù),也就是中間有空格的字符串時(shí),代碼只會(huì)打印出第一個(gè)空格以前的內(nèi)容

這是因?yàn)樵阪I盤與scanf函數(shù)中,存在一個(gè)輸入緩沖區(qū),從鍵盤輸入的內(nèi)容會(huì)存放到這個(gè)緩沖區(qū)中

scanf并不會(huì)讀取走空格,它只能讀取走字符以及字符串
例如當(dāng)從鍵盤輸入字符串abc 123(注意abc123之間是有一個(gè)空格的),在緩沖區(qū)中如圖:

scanf首先會(huì)將字符串abc取走,然后在abc后面有一個(gè)空格,scanf無(wú)法讀取走空格,所以雖然從鍵盤輸入abc 123,但是最后只有abc被存放在了str
所以最后只輸出了abc

總結(jié)一下scanf

輸入值之前的空白(空格、制表符、換行符)會(huì)被跳過(guò),輸入值之前的空白表示結(jié)束。因此,用%s格式碼輸入字符時(shí),中間不能包括空白

這里注意的是:前面講的scanf無(wú)法讀取輸入緩沖區(qū)中的空格甚至是回車,這里的scanf指的是scanf("%s",str),只是函數(shù)中是%s才無(wú)法讀取,而如果是scanf("%c",&character),輸入一個(gè)字符,對(duì)于空格和回車都是能正常輸入的,這里不要弄混

所以,用scanf接受字符串是有局限性的。

逐個(gè)字符處理

前面已經(jīng)講了,用scanf接受字符串是由局限性的,當(dāng)字符串中含有空格,scanf函數(shù)只能讀取第一個(gè)空格以前的字符串,但是如果非要用scanf進(jìn)行接受字符串,只能是逐個(gè)字符處理

代碼如下:

#include<stdio.h>
int main()
{
	char ch[10]; 
	for (int i = 0; i < 10; i++)
	{
		scanf("%c", &ch[i]);
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%c", ch[i]);
	}
	return 0;

這樣也可以進(jìn)行對(duì)于字符串的輸入以及輸出

用getchar()輸入字符串

getchar()與scanf最大的區(qū)別就是,getchar可以讀取走輸入緩沖區(qū)中的空格以及回車

這里的內(nèi)容我i之前有一篇文章進(jìn)行了詳細(xì)講解,請(qǐng)點(diǎn)擊查看

代碼如下:

int main()
{
	char str[20] = { 0 };
	char ch = 0;
	while ((ch = getchar()) != '\n')
	{
		putchar(ch);
	}
	return 0;
}

用gets()輸入字符串(簡(jiǎn)單快捷)

這里介紹一個(gè)新的函數(shù)gets(),此函數(shù)在頭文件string.h中,使用此函數(shù)需要加頭文件#include <string.h>
gets函數(shù)的官方格式: char * gets ( char * str );
在參數(shù)列表中,需要傳一個(gè)字符型指針,也就是我們要輸入的字符串的名(數(shù)組的名)
gets()函數(shù)的主要作用就是接受從鍵盤輸入的一個(gè)字符串
gets當(dāng)遇到換行符\n或者EOF時(shí)停止,并將讀取的結(jié)果存放在str指針?biāo)缸址麛?shù)組中

#include <stdio.h>
#include<string.h>
int main()
{
	char str[10];
	printf("請(qǐng)輸入字符串");
	gets(str);
	printf("請(qǐng)輸出字符串");
	printf("%s", str);
	return 0;
}

輸入帶有空格的字符串也可以正常輸出

其實(shí)還存在一個(gè)與gets函數(shù)配套的函數(shù)puts函數(shù),用來(lái)輸出字符,具體用法與printfputchar無(wú)差別

#include <stdio.h>
#include<string.h>
int main()
{
	char str[10];
	printf("請(qǐng)輸入字符串: ");
	gets(str);
	printf("請(qǐng)輸出字符串: ");
	puts(str);
	return 0;
}

gets函數(shù)與scanf、getchar的一些區(qū)別

在前面的scanf函數(shù)和getchar函數(shù)中,回車都需要值得注意,但是在get函數(shù)中,回車不作為讀取內(nèi)容,遇到回車時(shí),系統(tǒng)自動(dòng)用\0代替回車\n,所以輸入一行字符串后按下回車,就完成了一次輸入

gets函數(shù)一遇到回車就結(jié)束,并把這個(gè)回車從緩沖區(qū)中移走,這點(diǎn)與scanf不同,scanf是遇到回車,空格就結(jié)束,但并不會(huì)將回車、空格從緩沖區(qū)中移走

gets函數(shù)只會(huì)遇見(jiàn)回車時(shí)結(jié)束遇到空格、制表符都會(huì)正常讀取,而scanf遇到空格、回車、制表符都會(huì)結(jié)束,getchar遇到空格、回車、制表符都正常讀取

總結(jié)

到此這篇關(guān)于C語(yǔ)言輸入一個(gè)字符串的方法有哪些的文章就介紹到這了,更多相關(guān)C語(yǔ)言輸入字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 超詳細(xì)解析C++實(shí)現(xiàn)快速排序算法的方法

    超詳細(xì)解析C++實(shí)現(xiàn)快速排序算法的方法

    快速排序是比較快的排序方法。它的基本思想是通過(guò)一組排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,本文將用C++實(shí)現(xiàn)快速排序算法,需要的可以參考一下
    2022-09-09
  • C語(yǔ)言中的getchar()使用詳解

    C語(yǔ)言中的getchar()使用詳解

    大家好,本篇文章主要講的是C語(yǔ)言中的getchar()使用詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++模擬鍵盤按鍵的實(shí)例

    C++模擬鍵盤按鍵的實(shí)例

    今天小編就為大家分享一篇C++模擬鍵盤按鍵的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 基于Qt實(shí)現(xiàn)視頻播放器的制作

    基于Qt實(shí)現(xiàn)視頻播放器的制作

    本文主要為大家介紹了如何利用Qt中的qMediaPlayer和qvideowidget實(shí)現(xiàn)視頻文件(avi,mp4….)的播放,并且提供進(jìn)度顯示,還可以通過(guò)拖動(dòng)進(jìn)度條來(lái)變換播放位置,感興趣的可以嘗試一下
    2022-12-12
  • C語(yǔ)言刷題之倒置字符串的解題全過(guò)程

    C語(yǔ)言刷題之倒置字符串的解題全過(guò)程

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言刷題之倒置字符串的解題全過(guò)程,這是一道我們經(jīng)常刷到的實(shí)戰(zhàn)題目,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • c++ 深入理解歸并排序的用法

    c++ 深入理解歸并排序的用法

    歸并排序是典型分治思想的代表——首先把原問(wèn)題分解為兩個(gè)或多個(gè)子問(wèn)題,然后求解子問(wèn)題的解,最后使用子問(wèn)題的解來(lái)構(gòu)造出原問(wèn)題的解
    2022-03-03
  • EasyC++內(nèi)部鏈接性和無(wú)鏈接性

    EasyC++內(nèi)部鏈接性和無(wú)鏈接性

    這篇文章主要介紹了EasyC++內(nèi)部鏈接性和無(wú)鏈接性,當(dāng)我們使用static關(guān)鍵字,將變量的作用于限制在整個(gè)文件時(shí),該變量的鏈接性為內(nèi)部鏈接性,然而無(wú)鏈接性的變量其實(shí)就是在代碼塊當(dāng)中使用static關(guān)鍵字創(chuàng)建的,接下來(lái)一起進(jìn)入文章了解更多內(nèi)容吧
    2021-12-12
  • C++學(xué)習(xí)之移動(dòng)語(yǔ)義與智能指針詳解

    C++學(xué)習(xí)之移動(dòng)語(yǔ)義與智能指針詳解

    智能指針和移動(dòng)語(yǔ)義是迄今為止,最難理解的兩個(gè)概念,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)之移動(dòng)語(yǔ)義與智能指針的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • C語(yǔ)言浮點(diǎn)函數(shù)中的modf和fmod詳解

    C語(yǔ)言浮點(diǎn)函數(shù)中的modf和fmod詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言浮點(diǎn)函數(shù)中的modf和fmod,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 解析C語(yǔ)言中空指針、空指針常量、NULL & 0的詳解

    解析C語(yǔ)言中空指針、空指針常量、NULL & 0的詳解

    本篇文章是對(duì)C語(yǔ)言中空指針、空指針常量、NULL & 0 進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論