国产成人av人人爽人人澡-亚洲国产日韩欧美一区-好吊日视频这里只有精品-日本高清精品视频在线

您好,歡迎進入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞頭條 >> C語言字符串的輸入輸出
新聞資訊
NEWS INFORMATION

C語言字符串的輸入輸出

發(fā)布時間:2019-05-22

字符串的輸出

在C語言中,輸出字符串的函數(shù)有兩個:

  • puts():直接輸出字符串,并且只能輸出字符串。
  • printf():通過格式控制符 %s 輸出字符串。除了字符串,printf() 還能輸出其他類型的數(shù)據(jù)。


這兩個函數(shù)前面已經(jīng)講過了,這里不妨再演示一下,請看下面的代碼:

  1. #include <stdio.h>
  2. int main(){
  3. int i;
  4. char str[] = "http://c.biancheng.net";
  5. printf("%s\n", str); //通過變量輸出
  6. printf("%s\n", "http://c.biancheng.net"); //直接輸出
  7. puts(str); //通過變量輸出
  8. puts("http://c.biancheng.net"); //直接輸出
  9. return 0;
  10. }

運行結(jié)果:
http://c.biancheng.net
http://c.biancheng.net
http://c.biancheng.net
http://c.biancheng.net

在 printf() 函數(shù)中使用%s輸出字符串時,在變量列表中給出數(shù)組名即可,不能寫為printf("%s", str[]);。

字符串的輸入

在C語言中,輸入字符串的函數(shù)有兩個:

  • scanf():通過格式控制符 %s 輸入字符串。除了字符串,scanf() 還能輸入其他類型的數(shù)據(jù)。
  • gets():直接輸入字符串,并且只能輸入字符串。

1) 使用 scanf() 讀取字符串

請先看下面的例子:

  1. #include <stdio.h>
  2. int main(){
  3. char str1[30], str2[30];
  4. printf("Input str1: ");
  5. scanf("%s", str1);
  6. printf("Input str2: ");
  7. scanf("%s", str2);
  8. printf("str1: %s\nstr2: %s\n", str1, str2);
  9. return 0;
  10. }

運行結(jié)果:
Input str1: c.biancheng.net↙
Input str2: Java Python C-Sharp↙
str1: c.biancheng.net
str2: Java

由于字符數(shù)組長度為30,因此輸入的字符串長度必須小于30,以留出一個字節(jié)用于存放字符串結(jié)束標志`\0`。

對程序的說明:
① 我們本來希望將 "Java Python C-Sharp" 賦值給 str2,但是 scanf() 只讀取到 "Java",這是因為 scanf() 讀取到空格時就認為字符串輸入結(jié)束了,不會繼續(xù)讀取了。請看下面的例子:

  1. #include <stdio.h>
  2. int main(){
  3. char str1[20], str2[20], str3[20];
  4. printf("Input string: ");
  5. scanf("%s", str1);
  6. scanf("%s", str2);
  7. scanf("%s", str3);
  8. printf("str1: %s\nstr2: %s\nstr3: %s\n", str1, str2, str3);
  9. return 0;
  10. }

運行結(jié)果:
Input string: Java Python C-Sharp↙
str1: Java
str2: Python
str3: C-Sharp

第一個 scanf() 讀取到 "Java" 后遇到空格,結(jié)束讀取,將"Python C-Sharp" 留在緩沖區(qū)。第二個 scanf() 直接從緩沖區(qū)中讀取,不會等待用戶輸入,讀取到 "Python" 后遇到空格,結(jié)束讀取,將 "C-Sharp" 留在緩沖區(qū)。第三個 scanf() 讀取緩沖區(qū)中剩下的內(nèi)容。

關(guān)于緩沖區(qū)的知識,我們在《C語言緩沖區(qū)(緩存)詳解》《結(jié)合C語言緩沖區(qū)談scanf()函數(shù)》兩節(jié)中已經(jīng)進行了詳細講解。

② 在《從鍵盤輸入數(shù)據(jù)》中講到,scanf 的各個變量前面要加取地址符&,用以獲得變量的地址,例如:

int a, b;
scanf("%d %d", &a, &b);

但是在本節(jié)的示例中,將字符串讀入字符數(shù)組卻沒有使用&,例如:

char str1[20], str2[20], str3[20], str4[20];
scanf("%s %s %s %s",str1, str2, str3, str4);

這是因為C語言規(guī)定,數(shù)組名就代表了該數(shù)組的地址。整個數(shù)組是一塊連續(xù)的內(nèi)存單元,如有字符數(shù)組char c[10],在內(nèi)存可表示為:

C語言還規(guī)定,數(shù)組名所代表的地址為第0個元素的地址,例如char c[10];,c就代表c[0]的地址。第0個元素的地址就是數(shù)組的起始地址,稱為首地址。也就是說,數(shù)組名表示數(shù)組的首地址。

設(shè)數(shù)組c的首地址為0X2000,也即c[0]地址為0X2000,則數(shù)組名c就代表這個地址。因為c已經(jīng)表示地址,所以在c前面不能再加取地址符&,例如寫作scanf("%s",&c);是沒有道理的。

有了首地址,有了字符串結(jié)束符'\0',就可以在內(nèi)存中完整定位一個字符串了。例如:

printf("%s", c);

printf 函數(shù)會根據(jù)數(shù)組名找到c的首地址,然后逐個輸出數(shù)組中各個字符直到遇到 '\0' 為止。

int、float、char 類型的變量表示數(shù)據(jù)本身,數(shù)據(jù)就保存在變量中;而數(shù)組名表示的是數(shù)組的首地址,數(shù)組保存在其他內(nèi)存單元,數(shù)組名保存的是這塊內(nèi)存的首地址。后面我們會講解指針,大家將會有更加深刻的理解。

2) 使用 gets() 讀取字符串

gets 是 get string 的縮寫,意思是獲取用戶從鍵盤輸入的字符串,語法格式為:

gets(arrayName);

arrayName 為字符數(shù)組。從鍵盤獲得的字符串,將保存在 arrayName 中。請看下面的例子:

  1. #include <stdio.h>
  2. int main(){
  3. char str1[30], str2[30];
  4. printf("Input str1: ");
  5. gets(str1);
  6. printf("Input str2: ");
  7. gets(str2);
  8. printf("str1: %s\nstr2: %s\n", str1, str2);
  9. return 0;
  10. }

運行結(jié)果:
Input str1: Java Python C-Sharp↙
Input str2: http://c.biancheng.net↙
str1: Java Python C-Sharp
str2: http://c.biancheng.net

可以發(fā)現(xiàn),當輸入的字符串中含有空格時,輸出仍為全部字符串,這說明 gets() 函數(shù)不會把空格作為輸入結(jié)束的標志,而只把回車換行作為輸入結(jié)束的標志,這與 scanf() 函數(shù)是不同的。

總結(jié):如果希望讀取的字符串中不包含空格,那么使用 scanf() 函數(shù);如果希望獲取整行字符串,那么使用 gets() 函數(shù),它能避免空格的截斷。

聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

国产精品伦一区二区三区四季| 久久精品国产在热亚洲| 精品国产亚洲av久一区二区三区 | 男人大臿蕉香蕉大视频| 婷婷色网视频在线播放| 亚洲二区欧美一区二区| 九九热视频经典在线观看| 欧美一区二区日韩一区二区| 日韩丝袜诱惑一区二区| 亚洲高清中文字幕一区二三区| 亚洲深夜精品福利一区| 中文人妻精品一区二区三区四区| 亚洲精品一区三区三区| 日本道播放一区二区三区| 久热青青草视频在线观看| 国产亚洲视频香蕉一区| 欧洲偷拍视频中文字幕| 一区中文字幕人妻少妇| 欧美日韩精品一区免费| 色婷婷亚洲精品综合网| 国产内射一级一片内射高清| 欧洲一区二区三区自拍天堂| 色一情一乱一区二区三区码| 黑丝袜美女老师的小逼逼| 亚洲男人的天堂久久a| 精品女同一区二区三区| 国产精品亚洲欧美一区麻豆| 国产精品涩涩成人一区二区三区| 日本午夜免费福利视频 | 五月天丁香婷婷狠狠爱| 丁香六月婷婷基地伊人| 偷自拍亚洲欧美一区二页| 欧美成人黄色一级视频| 国产一区二区三区午夜精品| 久久99国产精品果冻传媒| 国产亚洲精品久久99| 一区二区三区亚洲天堂| 国产麻豆一线二线三线| 护士又紧又深又湿又爽的视频| 厕所偷拍一区二区三区视频| 欧美人妻少妇精品久久性色|