国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言字符和字符串的輸入與輸出

這篇具有很好參考價(jià)值的文章主要介紹了C語言字符和字符串的輸入與輸出。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

C語言

一、輸入單個(gè)字符

1、scanf函數(shù)輸入單個(gè)字符

C語言scanf輸入時(shí)緩沖區(qū)問題
scanf函數(shù)是標(biāo)準(zhǔn)輸入流(從鍵盤接收數(shù)據(jù)),接收的數(shù)據(jù)放入輸入緩沖區(qū)中,其中就包括在鍵盤輸入的空格、回車這類字符,當(dāng)你用%d接收時(shí)是不會(huì)影響的,但是用%c就會(huì)產(chǎn)生錯(cuò)誤,這是因?yàn)樵?%c"輸入時(shí),空格和轉(zhuǎn)義字符均作為有效字符會(huì)被%c接收。
例如:

#include <stdio.h>
int main()
{
	char a,b,c;
	scanf("%c%c%c",&a,&b,&c);
	printf("%c,%c,%c",a,b,c);
	return 0;
} 

運(yùn)行結(jié)果:
C語言字符和字符串的輸入與輸出

解決方法:
1.在接收第二個(gè)數(shù)之前清空緩沖區(qū)getchar(),getchar()是清空—個(gè)字符,如果緩沖區(qū)還有多余的字符則會(huì)被正常使用
例如:

#include <stdio.h>
int main()
{
	char a,b,c;
	scanf("%c",&a);      
	scanf("%c",&b); 
	printf("a=%c,b=%c",a,b);
	return 0;
} 

運(yùn)行結(jié)果:
C語言字符和字符串的輸入與輸出
這里我們預(yù)想的效果應(yīng)該是先輸入a的值回車后輸入b的值。但是通過運(yùn)行結(jié)果可以發(fā)現(xiàn),當(dāng)我們輸入a的值回車后,直接跳過了輸入b的值。這是因?yàn)閟cancf不是直接從鍵盤上獲取數(shù)據(jù),而是通過緩存區(qū)來獲取。scanf會(huì)先去看緩沖區(qū)中是否有數(shù)據(jù),如果有就直接拿走,并不需要鍵盤輸入。如果沒有就需要等待鍵盤輸入數(shù)據(jù)到緩沖區(qū),然后再從緩沖區(qū)中取走數(shù)據(jù)。
C語言字符和字符串的輸入與輸出
這里我們按了鍵盤上的1和回車,這時(shí)1\n(回車就是\n也算個(gè)字符)就被傳入了緩沖區(qū),而scanf函數(shù)只會(huì)取走\(yùn)n之前的數(shù)據(jù),緩沖區(qū)就遺留了個(gè)\n。當(dāng)?shù)诙€(gè)scanf函數(shù)開始讀取時(shí)就直接從緩沖區(qū)中取走了\n,就導(dǎo)致我們沒來得及輸入就直接跳過了。

getchar的作用是讀取一個(gè)字符,也是輸入函數(shù),所以和scanf讀取數(shù)據(jù)的過程一樣,都是從緩存區(qū)中獲取數(shù)據(jù)。為了不跳過第二個(gè)scanf,我們就可以在接收第二個(gè)數(shù)之前清空緩沖區(qū),用getchar將緩存區(qū)的\n取走。

#include <stdio.h>
int main()
{
	char a,b,c;
	scanf("%c",&a); 
	getchar();    // 清空緩存區(qū),把\n清除      
	scanf("%c",&b); 
	printf("a=%c,b=%c",a,b);
	return 0;
} 

運(yùn)行結(jié)果:
C語言字符和字符串的輸入與輸出

2.在%c之前加入空格,空格可以吸收回車符、空格。如果是在循環(huán)中多個(gè)scanf輸入多個(gè)字符,建議使用",“進(jìn)行隔開,并且在鍵盤輸入的時(shí)候也要使用”,"
例如:

#include <stdio.h>
int main()
{
	char a,b,c;
	scanf("%c %c %c",&a,&b,&c);
	printf("%c,%c,%c",a,b,c);
	return 0;
} 

運(yùn)行結(jié)果:
C語言字符和字符串的輸入與輸出

2、getchar函數(shù)輸入單個(gè)字符
#include <stdio.h>        
int main()
{
    printf("Please input two character: ");
    int ch=getchar();         //從緩存區(qū)中讀取1個(gè)字符并賦給ch 
    putchar(ch);			  //輸出字符
    putchar('\n');
    putchar(getchar());      //從緩存區(qū)中讀取1個(gè)字符并輸出
    putchar('\n');
}                         

Please input two characters: ok↙
o
k

注:getchar()的返回值類型為int()

二、輸入字符串

1、scanf函數(shù)輸入字符串
#include <stdio.h>
int main()
{
    char str[20];  //str是string的縮寫, 即字符串
    printf("請(qǐng)輸入字符串:");
    scanf("%s", str);  /*輸入?yún)?shù)是已經(jīng)定義好的“字符數(shù)組名”, 不用加&,
                        因?yàn)樵贑語言中數(shù)組名就代表該數(shù)組的起始地址*/
    printf("輸出的結(jié)果是:%s\n", str);
    return 0;
}

例1.
請(qǐng)輸入字符串:天天開心
輸出的結(jié)果是:天天開心

例2.
請(qǐng)輸入字符串:i am working
輸出的結(jié)果是:i

出現(xiàn)例2的原因:
原因是用 scanf 輸入帶空格的字符串時(shí)系統(tǒng)將空格作為輸入字符串之間的分隔符。也就是說,只要一“敲”空格,系統(tǒng)就認(rèn)為當(dāng)前的字符串已經(jīng)結(jié)束,接下來輸入的是下一個(gè)字符串,所以只會(huì)將空格之前的字符串存儲(chǔ)到定義好的字符數(shù)組中。
那么這種情況該怎么辦?
解決方法:
以空格為分隔符,數(shù)有多少個(gè)字符串,有多少個(gè)字符串就定義多少個(gè)字符數(shù)組。比如“i am working”有兩個(gè)空格,表示有三個(gè)字符串,那么就定義三個(gè)字符數(shù)組:

# include <stdio.h>
int main()
{
    char str1[20], str2[20], str3[20];
    printf("請(qǐng)輸入字符串:");
    scanf("%s%s%s", str1, str2, str3);
    printf("輸出的結(jié)果是:%s %s %s\n", str1, str2, str3);  //%s間要加空格
    return 0;
}

請(qǐng)輸入字符串:i am working
輸出的結(jié)果是:i am working

2、gets函數(shù)輸入字符串

在<string.h>頭文件中

字符串輸入函數(shù)gets
格式:gets(字符數(shù)組)
功能:從鍵盤鍵入以回車結(jié)束的字符串放入字符數(shù)組中,并自動(dòng)加’\0’
說明:輸入串長度應(yīng)小于字符數(shù)組維數(shù),字符串中可以包含空格

字符串輸出函數(shù)puts
格式:puts(字符數(shù)組)
功能:向顯示器輸出字符串(輸出完,自動(dòng)換行,即用’\n’替’\0’)
說明:字符數(shù)組必須以’\0’結(jié)束

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

請(qǐng)輸入字符串:so cute
請(qǐng)輸出字符串:so cute文章來源地址http://www.zghlxwxcb.cn/news/detail-407252.html

到了這里,關(guān)于C語言字符和字符串的輸入與輸出的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包