2021-05-12 14:32:11
C語言中%c與%s的區別與劃分詳解
2020-12-07 18:03:18
%c格式對應的是單個字元,%s格式對應的是字串。
例:
char a; char b[20]; scanf("%c",&a); //只能輸入一個字元。 scanf("%s",b); //可以輸入一串不超過20字元的字串。
%c對應型別為char, %s對應型別為char * , 即字串.
用作輸入時, 二者引數都要傳char * 型.
%c輸入函數只會對一個位元組空間賦值. 而%s會一直賦值,直到輸入中遇到空白字元為止.
用作輸出時, %c傳char型別,輸出一個字元. %s傳char*型別引數, 輸出到 為止.
%c只能輸出或輸入一個字元,%s輸出的是一串字元還有就是char a; string s;
輸入的時候scanf("%c", &a);這裡的&不能少
而scanf("%s",s);這裡不能有&符號
轉換說明符
%a(%A) 浮點數、十六進位制數位和p-(P-)記數法(C99) %c 字元 %d 有符號十進位制整數 %f 浮點數(包括float和doulbe) %e(%E) 浮點數指數輸出[e-(E-)記數法] %g(%G) 浮點數不顯無意義的零"0" %i 有符號十進位制整數(與%d相同) %u 無符號十進位制整數 %o 八進位制整數 e.g. 0123 %x(%X) 十六進位制整數0f(0F) e.g. 0x1234 %p 指標 %s 字串 %% "%"
補充知識:c語言中scanf("%c",&c)吃掉回車或者空格字元的問題
2`標誌
左對齊:"-" e.g. "%-20s"
右對齊:"+" e.g. "%+20s"
3.格式字串(格式)
〔標誌〕〔輸出最少寬度〕〔.精度〕〔長度〕型別 "%-md" : 左對齊,若m比實際少時,按實際輸出。 "%m.ns" : 輸出m位,取字串(左起)n位,左補空格,當n>m or m省略時m=n "%m.nf" : 輸出浮點數,m為寬度,n為小數點右邊數位 "%3.1f" : 輸入3852.99 輸出3853.0
補充知識:c語言中scanf("%c",&c)吃掉回車或者空格字元的問題
我就廢話不多說了,大家還是直接看程式碼吧~
#include<stdio.h> void main(){ int a; char b; printf("input a integern"); scanf("%d",&a); //這裡需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下程式碼 告訴我第二種怎麼用 printf("input a charn"); scanf("%c",&b); printf("%d,%cn",a,b); } /* (1)用getchar()清除 (2)用"%1s"來限制 (3)用格式串中空格或"%*c"來"吃掉" (4)用函數fflush(stdin)清除全部剩餘內容 */
下面使用第二種方法
#include<stdio.h> int main(){ int a; char b; printf("input a integern"); scanf("%d",&a); //這裡需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下程式碼 告訴我第二種怎麼用 printf("input a charn"); scanf("%1s",&b); printf("%d %cn",a,b); system("pause"); return 0; }
環境(dev c++)
測試結果
可以看出a的值異常了,為什麼呢?
這應該和編譯器有關係,因為%1s的輸入方式的問題。
解決方法有兩種:
第一:
char b;
int a;
將這兩個變數的宣告換一下,哈哈,以前老師說過。但我感覺著不是解決方法,如果還有其他的變數,這種方式是不是還會危害其他呢。
第二:
#include<stdio.h> int main(){ int a; char b[2]; printf("input a integern"); scanf("%d",&a); //這裡需要吸收 回車符 下面有種方法,第二種我沒看懂 誰能改下程式碼 告訴我第二種怎麼用 printf("input a charn"); scanf("%1s",&b); printf("%d %cn",a,b[0]); system("pause"); return 0; }
b宣告成字元創的形式,哈哈,這個好。。。。
結果為:
以上這篇C語言中%c與%s的區別與劃分詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章