C語言中%c與%s的區(qū)別與劃分詳解
%c格式對(duì)應(yīng)的是單個(gè)字符,%s格式對(duì)應(yīng)的是字符串。
例:
char a;
char b[20];
scanf("%c",&a); //只能輸入一個(gè)字符。
scanf("%s",b); //可以輸入一串不超過20字符的字符串。
%c對(duì)應(yīng)類型為char, %s對(duì)應(yīng)類型為char * , 即字符串.
用作輸入時(shí), 二者參數(shù)都要傳char * 型.
%c輸入函數(shù)只會(huì)對(duì)一個(gè)字節(jié)空間賦值. 而%s會(huì)一直賦值,直到輸入中遇到空白字符為止.
用作輸出時(shí), %c傳char類型,輸出一個(gè)字符. %s傳char*類型參數(shù), 輸出到\0為止.
%c只能輸出或輸入一個(gè)字符,%s輸出的是一串字符還有就是char a; string s;
輸入的時(shí)候scanf("%c", &a);這里的&不能少
而scanf("%s",s);這里不能有&符號(hào)
轉(zhuǎn)換說明符
%a(%A) 浮點(diǎn)數(shù)、十六進(jìn)制數(shù)字和p-(P-)記數(shù)法(C99) %c 字符 %d 有符號(hào)十進(jìn)制整數(shù) %f 浮點(diǎn)數(shù)(包括float和doulbe) %e(%E) 浮點(diǎn)數(shù)指數(shù)輸出[e-(E-)記數(shù)法] %g(%G) 浮點(diǎn)數(shù)不顯無意義的零"0" %i 有符號(hào)十進(jìn)制整數(shù)(與%d相同) %u 無符號(hào)十進(jìn)制整數(shù) %o 八進(jìn)制整數(shù) e.g. 0123 %x(%X) 十六進(jìn)制整數(shù)0f(0F) e.g. 0x1234 %p 指針 %s 字符串 %% "%"
補(bǔ)充知識(shí):c語言中scanf("%c",&c)吃掉回車或者空格字符的問題
2`標(biāo)志
左對(duì)齊:"-" e.g. "%-20s"
右對(duì)齊:"+" e.g. "%+20s"
3.格式字符串(格式)
〔標(biāo)志〕〔輸出最少寬度〕〔.精度〕〔長(zhǎng)度〕類型 "%-md" : 左對(duì)齊,若m比實(shí)際少時(shí),按實(shí)際輸出。 "%m.ns" : 輸出m位,取字符串(左起)n位,左補(bǔ)空格,當(dāng)n>m or m省略時(shí)m=n "%m.nf" : 輸出浮點(diǎn)數(shù),m為寬度,n為小數(shù)點(diǎn)右邊數(shù)位 "%3.1f" : 輸入3852.99 輸出3853.0
補(bǔ)充知識(shí):c語言中scanf("%c",&c)吃掉回車或者空格字符的問題
我就廢話不多說了,大家還是直接看代碼吧~
#include<stdio.h>
void main(){
int a;
char b;
printf("input a integer\n");
scanf("%d",&a);
//這里需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下代碼 告訴我第二種怎么用
printf("input a char\n");
scanf("%c",&b);
printf("%d,%c\n",a,b);
}
/*
(1)用getchar()清除
(2)用"%1s"來限制
(3)用格式串中空格或"%*c"來"吃掉"
(4)用函數(shù)fflush(stdin)清除全部剩余內(nèi)容
*/
下面使用第二種方法
#include<stdio.h>
int main(){
int a;
char b;
printf("input a integer\n");
scanf("%d",&a);
//這里需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下代碼 告訴我第二種怎么用
printf("input a char\n");
scanf("%1s",&b);
printf("%d %c\n",a,b);
system("pause");
return 0;
}
環(huán)境(dev c++)
測(cè)試結(jié)果

可以看出a的值異常了,為什么呢?
這應(yīng)該和編譯器有關(guān)系,因?yàn)?1s的輸入方式的問題。
解決方法有兩種:
第一:
char b;
int a;
將這兩個(gè)變量的聲明換一下,哈哈,以前老師說過。但我感覺著不是解決方法,如果還有其他的變量,這種方式是不是還會(huì)危害其他呢。
第二:
#include<stdio.h>
int main(){
int a;
char b[2];
printf("input a integer\n");
scanf("%d",&a);
//這里需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下代碼 告訴我第二種怎么用
printf("input a char\n");
scanf("%1s",&b);
printf("%d %c\n",a,b[0]);
system("pause");
return 0;
}
b聲明成字符創(chuàng)的形式,哈哈,這個(gè)好。。。。
結(jié)果為:

以上這篇C語言中%c與%s的區(qū)別與劃分詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)哈夫曼樹簡(jiǎn)單創(chuàng)建與遍歷的方法
這篇文章主要介紹了C++實(shí)現(xiàn)哈夫曼樹簡(jiǎn)單創(chuàng)建與遍歷的方法,對(duì)于C++算法的學(xué)習(xí)來說不失為一個(gè)很好的借鑒實(shí)例,需要的朋友可以參考下2014-07-07
用C++實(shí)現(xiàn)一個(gè)命令行進(jìn)度條的示例代碼
這篇文章主要介紹了用C++實(shí)現(xiàn)一個(gè)命令行進(jìn)度條的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Qt6.3 + Clion +MSVC2019環(huán)境配置詳解
本文主要介紹了Qt6.3 + Clion +MSVC2019環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
C++ 模擬實(shí)現(xiàn)list(迭代器)實(shí)現(xiàn)代碼
這篇文章主要介紹了C++ 模擬實(shí)現(xiàn)list(迭代器)實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05

