青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 19,  comments - 21,  trackbacks - 0

 

摘要:

本文闡述了基于ANSIWin 95Win NT上的 C/C++語言中scanf()函數(shù)的用法,以及在實(shí)際使用中常見錯誤及對策。

關(guān)鍵詞

scanf()

 

一、             序言

CSDN論壇的C/C++版塊,我時常見到“對于scanf()函數(shù)的用法、及出現(xiàn)的各種錯誤而迷惑”的帖子,萌發(fā)了我寫這篇文章的念頭。文中結(jié)合自身在學(xué)習(xí)和編程中對它的認(rèn)識和體會,以具體示例闡述問題,目的在于使得初學(xué)者能夠正確使用scanf()函數(shù),少走不必要的彎路。

二、             scanf()函數(shù)的用法

scanf()函數(shù)是格式化輸入函數(shù),它從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤) 讀取輸入的信息。

 

其調(diào)用格式為:      scanf("<格式化字符串>"<地址表>);

 

格式化字符串包括以下三類不同的字符;

1、  格式化說明符:

格式化說明符與printf()函數(shù)中的格式說明符基本相同。但和printf()函數(shù)中格式字符串的用法有一些小區(qū)別。我們來看下面這個表。
 

格式字符

說明

%d

從鍵盤輸入十進(jìn)制整數(shù)

%o

從鍵盤輸入八進(jìn)制整數(shù)

%x

從鍵盤輸入十六進(jìn)制整數(shù)

%c

從鍵盤輸入一個字符

%s

從鍵盤輸入一個字符串

%f

從鍵盤輸入一個實(shí)數(shù)

%e

%f的作用相同

附加格式說明字符表

字符

說明

L

輸入"長"數(shù)據(jù)

H

輸入"短"數(shù)據(jù)

M

指定輸入數(shù)據(jù)所占寬度

*

空讀一個數(shù)據(jù)

 

2、    空白字符: 空白字符會使scanf()函數(shù)在讀操作中略去輸入中的一個或多個空白字符。

3、    非空白字符: 一個非空白字符會使scanf()函數(shù)在讀入時剔除掉與這個非空白字符相同的字符。

 

地址表是需要讀入的所有變量的地址,而不是變量本身。這與printf()函數(shù)完全不同,要特別注意。各個變量的地址之間同","分開。

例如:

#include <stdio.h>

void main()

{

       int i, j;

       printf("i, j=?\n");

       scanf("%d, %d", &i, &j);

}

上例中的scanf()函數(shù)先讀一個整型數(shù),然后把接著輸入的逗號剔除掉,最后讀入另一個整型數(shù)。如果","這一特定字符沒有找到,scanf()函數(shù)就終止。若參數(shù)之間的分隔符為空格,則參數(shù)之間必須輸入一個或多個空格。

說明:

(1)          對于字符串?dāng)?shù)組或字符串指針變量,由于數(shù)組名和指針變量名本身就是地址,因此使用scanf()函數(shù)時,不需要在它們前面加上"&"操作符。

例如:

#include <stdio.h>

void main()

{

       char *p, str[20];

      

                p = new char[20];

               

          scanf("%s", p); /*從健盤輸入字符串*/

          scanf("%s", str);

          printf("%s\n", p); /*向屏幕輸出字符串*/

          printf("%s\n", str);

}

 

(2)          可以在格式化字符串中的"%"各格式化規(guī)定符之間加入一個整數(shù),表示任何讀操作中的最大位數(shù)。

如上例中若規(guī)定只能輸入10字符給字符串指針p,則第一條scanf() 函數(shù)語句變?yōu)椋?/SPAN>scanf("%10s", p);

程序運(yùn)行時一旦輸入字符個數(shù)大于10p就不再繼續(xù)讀入,而后面的一個讀入函數(shù)即scanf("%s", str)就會從第11個字符開始讀入。

(3)             scanf()函數(shù)中沒有精度控制。

如: scanf("%5.2f",&a); 是非法的。不能企圖用此語句輸入小數(shù)為2位的實(shí)數(shù)。

(4)             scanf中要求給出變量地址,如給出變量名則會出錯

scanf("%d",a);是非法的,應(yīng)改為scnaf("%d",&a);才是合法的。

(5)          在輸入多個數(shù)值數(shù)據(jù)時,若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。

C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對“%d”輸入“12A”時,A即為非法數(shù)據(jù))時即認(rèn)為該數(shù)據(jù)結(jié)束。

(6)          在輸入字符數(shù)據(jù)(%c)時,若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。

例如:scanf("%c%c%c",&a,&b,&c);

輸入為:

d e f

則把'd'賦予a, ' (空格)'賦予b,'e'賦予c。因為%c 只要求讀入一個字符,后面不需要用空格作為兩個字符的間隔,因此把' '作為下一個字符送給b

只有當(dāng)輸入為:def 時,才能把'd'賦于a,'e'賦予b,'f'賦予c 如果在格式控制中加入空格作為間隔,

scanf ("%c %c %c",&a,&b,&c);則輸入時各數(shù)據(jù)之間可加空格。

我們用一些例子來說明一些規(guī)則:

#include <stdio.h>

void main()

{

       char a,b;

       printf("input character a,b\n");

       scanf("%c%c",&a,&b);  /*注意兩個%c之間沒有任何符號*/

       printf("%c%c\n",a,b);

}

由于scanf函數(shù)"%c%c"中沒有空格,輸入M N,結(jié)果輸出只有M。而輸入改為MN時則可輸出MN兩字符,見下面的輸入運(yùn)行情況: input character a,b

MN    (你輸入的值)

MN    (屏幕上顯示的值)

#include <stdio.h>

void main()

{

       char a,b;

       printf("input character a,b\n");

       scanf("%c %c",&a,&b); /*注意兩個%c之間有個空格*/

       printf("\n%c%c\n",a,b);

}本例表示scanf格式控制串"%c %c"之間有空格時, 輸入的數(shù)據(jù)之間可以有空格間隔。

(7)             如果格式控制串中有非格式字符則輸入時也要輸入該非格式字符。

例如:

scanf("%d,%d,%d",&a,&b,&c); 其中用非格式符“ , ”作間隔符,故輸入時應(yīng)為: 5,6,7 (scanf 雙引號之間的格式必須一樣)

又如: scanf("a=%d,b=%d,c=%d",&a,&b,&c);

則輸入應(yīng)為 a=5,b=6,c=7

如輸入的數(shù)據(jù)與輸出的類型不一致時,雖然編譯能夠通過,但結(jié)果將不正確。

 

#include <stdio.h>

void main()

{

       int a;

       printf("input a number");

       scanf("%d",&a);

       printf("%ld",a);

}

由于輸入數(shù)據(jù)類型為整型, 而輸出語句的格式串中說明為長整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。輸出并不是輸入的值。

如將Scanf("%d",&a); 語句改為 scanf("%ld",&a);

輸入數(shù)據(jù)為長整型,輸入輸出數(shù)據(jù)才相等。

三、             常見錯誤及對策

問題1

我初學(xué)C程序,所以提的問題很淺,希望您不要見笑。我自己編了一個程序,但運(yùn)行的結(jié)果與我預(yù)期的不一樣。

#include<stdio.h>

void  main()

{

       static int a[2][3]={{1,3,4},{7,9,6}};

       int i,j,k;

       for(k=1;k<=2;k++)

       {printf("Please input num:");

       scanf("%d %d",&i,&j);

       if(i<2&&j<3)

              printf("num=%d\n",a[i][j]);

       else printf("Input is error,\n");

       }

       printf("programm is complete.\n");

}

我想將第8行改為

scanf("i=%d j=%d",&i,&j);

則程序運(yùn)行結(jié)果變成

please input num:i=1 j=2

num=6

num=6(我原本希望能重復(fù)第一行再讓我輸入)

Programm is complete.

為什么第二次不能輸入?

答復(fù):

我使用Turbo C 2.0證實(shí)存在你說的問題。象scanf("i=%d j=%d",&i,&j);這樣的輸入方式比較特別,TC 2.0顯然在第一次輸入后沒有象正常情況一樣清楚輸入緩沖區(qū),這樣第二次執(zhí)行scanf時,程序并沒有讓你輸入而是直接讀入上次輸入的結(jié)果。如果你一定要這么做,應(yīng)該在scanf之前加上:

fflush(stdin);

這樣清楚掉鍵盤緩沖區(qū)。

 

問題2

為什么要把scanf("%c",varname)一定改成scanf(" %c")才可以正確接收字符?

答復(fù):

類似上題,在%c的前面必須有一個空格,否則系統(tǒng)會將你前面輸入別的值之后鍵入的回車符讀入該變量,造成死循環(huán)。當(dāng)然,如果scanf("%c",&varname)是第一條讀入語句,就可以不需要空格。

 

問題3(輸入變量時忘記加地址運(yùn)算符“&”)

int a,b;

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

答復(fù):

這是不合法的。Scanf函數(shù)的作用是:按照ab在內(nèi)存的地址將ab的值存進(jìn)去。“&a”指a在內(nèi)存中的地址。

 

問題4(輸入數(shù)據(jù)的方式與要求不符)

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

輸入時,不能用逗號作兩個數(shù)據(jù)間的分隔符,如下面輸入不合法:

34

輸入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab

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

C規(guī)定:如果在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些字符相同的字符。下面輸入是合法的:

34

此時不用逗號而用空格或其它字符是不對的。

3 4 34

又如:

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

輸入應(yīng)如以下形式:

a=3,b=4

 

問題5(輸入字符的格式與要求不一致)

在用“%c”格式輸入字符時,“空格字符”和“轉(zhuǎn)義字符”都作為有效字符輸入。

scanf("%c%c%c",&c1,&c2,&c3);

如輸入a b c

字符“a”送給c1,字符“ ”送給c2,字符“b”送給c3,因為%c只要求讀入一個字符,后面不需要用空格作為兩個字符的間隔。

 

問題6.輸入輸出的數(shù)據(jù)類型與所用格式說明符不一致)

例如,a已定義為整型,b定義為實(shí)型

a=3;b=4.5;

printf("%f%d\n",a,b);

編譯時不給出出錯信息,但運(yùn)行結(jié)果將與原意不符。這種錯誤尤其需要注意。

 

問題7(輸入數(shù)據(jù)時,企圖規(guī)定精度)

scanf("%7.2f",&a);

這樣做是不合法的,輸入數(shù)據(jù)時不能規(guī)定精度。

 

問題8(在不應(yīng)加地址運(yùn)算符&的位置加了地址運(yùn)算符)

scanf("%s",&str);

C語言編譯系統(tǒng)對數(shù)組名的處理是:數(shù)組名代表該數(shù)組的起始地址,且scanf函數(shù)中的輸入項是字符數(shù)組名,不必要再加地址符&。應(yīng)改為:scanf("%s",str);

四、             結(jié)論

本文主要講述了C/C++中的scanf()函數(shù)的用法,重點(diǎn)闡述使用scanf()函數(shù)過程中出現(xiàn)的常見錯誤及對策。當(dāng)然,文中某些解決方法,均可以采用其他函數(shù)和方法來更好地解決,但本文僅限討論scanf()函數(shù)本身。文中難免存在一些不足之處,歡迎讀者批評指正。

posted on 2005-11-25 22:19 halCode 閱讀(1056) 評論(0)  編輯 收藏 引用 所屬分類: 算法/數(shù)據(jù)結(jié)構(gòu)

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(7)

隨筆分類

隨筆檔案

文章分類

文章檔案

相冊

編程資源

不務(wù)正業(yè)

找工作

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久**毛片大全| 蜜桃久久精品一区二区| 久久精品国产综合| 欧美日韩国产色视频| 欧美激情在线观看| 亚洲高清免费在线| 欧美+日本+国产+在线a∨观看| 亚洲欧美日韩综合| 亚洲第一在线| 免费久久99精品国产自| 国产一区二区三区免费在线观看| 中文精品视频| 久久久久国产一区二区| 亚洲精选大片| 99在线|亚洲一区二区| 国产亚洲网站| 久久综合中文色婷婷| 亚洲精品国产精品久久清纯直播 | 久久精品一区中文字幕| 久久香蕉国产线看观看av| 久久狠狠久久综合桃花| 欧美一区=区| 能在线观看的日韩av| 欧美成人国产一区二区| 亚洲网站在线观看| 国产三级精品三级| 激情校园亚洲| 国产精品国产三级欧美二区| 国产九区一区在线| 亚洲激情视频网| 亚洲一区二区在线免费观看| 久久久91精品国产| 最新亚洲一区| 亚洲少妇诱惑| 开元免费观看欧美电视剧网站| 久久综合999| 新片速递亚洲合集欧美合集| 久久亚裔精品欧美| 亚洲韩日在线| 狠狠色伊人亚洲综合成人| 欧美国产先锋| 亚洲欧美成人| 亚洲国产综合在线| 欧美理论电影在线播放| 在线视频欧美日韩| 欧美激情综合在线| 亚洲人成欧美中文字幕| 欧美在线观看你懂的| 久色成人在线| 久久精品欧美日韩| 99天天综合性| 国产欧美日韩综合一区在线播放| 99视频在线精品国自产拍免费观看| 久久香蕉国产线看观看av| 久久久久国产一区二区三区四区| 欧美日韩在线免费| 亚洲无吗在线| 久久综合网色—综合色88| 亚洲线精品一区二区三区八戒| aa国产精品| 欧美一级淫片播放口| 亚洲精品日韩久久| 欧美黄色免费| 久久先锋资源| 一级日韩一区在线观看| 欧美吻胸吃奶大尺度电影| 亚洲激情电影中文字幕| 亚洲国产影院| 亚洲欧美电影在线观看| 一区二区三区毛片| 欧美α欧美αv大片| 欧美三级在线视频| 一本色道久久综合亚洲精品不 | 裸体丰满少妇做受久久99精品| 99热免费精品在线观看| 欧美精品一区二区在线播放| 久久三级视频| 欧美成人高清| 在线一区亚洲| 久久中文字幕一区二区三区| 国产精品video| 欧美成人在线影院| 国产午夜久久| 国产精品久久久久久五月尺| 国产精品亚洲综合久久| 欧美一区二区日韩一区二区| 国产精品日韩专区| 午夜电影亚洲| 亚洲免费视频在线观看| 亚洲日本激情| 一区二区三区精品在线| 欧美片网站免费| 麻豆av一区二区三区| 午夜国产不卡在线观看视频| 亚洲欧洲免费视频| 亚洲乱码国产乱码精品精| 国产精品手机在线| 亚洲国产视频a| 亚洲日本欧美| 亚洲第一天堂无码专区| 欧美精品成人91久久久久久久| 日韩视频免费观看高清完整版| 亚洲视频在线观看视频| 欧美国产高清| 久久久久久成人| 亚洲精品在线免费| 黄色一区二区在线| 国产午夜精品全部视频在线播放| 亚洲三级影院| 亚洲一区二区三区涩| 久久久之久亚州精品露出| 久久久久久日产精品| 亚洲一区二区三区国产| 日韩一级大片| 欧美fxxxxxx另类| 男人的天堂成人在线| 亚洲午夜电影在线观看| 99视频国产精品免费观看| 亚洲图片欧洲图片日韩av| 午夜激情久久久| 性欧美1819性猛交| 久久久国产精品亚洲一区 | 欧美成人午夜激情视频| 久久久精品国产免大香伊| 欧美在线视频网站| 欧美人与性动交α欧美精品济南到| 欧美在线看片a免费观看| 狠狠v欧美v日韩v亚洲ⅴ| 嫩模写真一区二区三区三州| 欧美一区二区三区在线视频| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲国产精品传媒在线观看| 亚洲欧美一区二区在线观看| 99精品欧美一区二区三区综合在线| 欧美精品 日韩| 欧美日韩精品国产| 亚洲欧洲av一区二区三区久久| 亚洲成色777777女色窝| 欧美成人免费网| 亚洲欧美综合网| 18成人免费观看视频| 久久亚洲春色中文字幕久久久| 亚洲天堂av综合网| 国产亚洲精品久| 国产欧美日韩另类视频免费观看| 韩国av一区二区| 久久精品女人的天堂av| 亚洲欧美经典视频| 亚洲国产精品va在线观看黑人| 亚洲欧美日韩在线不卡| 国产精品国产三级国产aⅴ浪潮| 国产精品尤物福利片在线观看| 篠田优中文在线播放第一区| 99视频一区二区三区| 欧美日韩一区二区免费视频| 免费观看一级特黄欧美大片| 久久精品首页| 女生裸体视频一区二区三区| 日韩视频在线永久播放| 欧美国产视频在线| 精品动漫3d一区二区三区| 亚洲欧美电影院| 欧美日韩成人精品| 午夜日韩电影| 欧美性猛交xxxx乱大交蜜桃| 欧美freesex8一10精品| 欧美性理论片在线观看片免费| 一本色道久久| 久久久精品网| 国产视频精品xxxx| 亚洲视频网在线直播| 麻豆av福利av久久av| 久久视频在线看| 国产精品va| 欧美一级专区免费大片| 欧美高清视频免费观看| 欧美日韩另类综合| 男男成人高潮片免费网站| 伊人蜜桃色噜噜激情综合| 99热精品在线| 久久久久久久成人| 一色屋精品视频免费看| 亚洲无玛一区| 久久久久久夜精品精品免费| 国产一区二区三区久久| 欧美一区免费视频| 美国成人毛片| 欧美一区二区三区男人的天堂| 久久久噜噜噜久噜久久| 久久综合久色欧美综合狠狠| 一区二区三区日韩精品| 国产精品欧美经典| 午夜精品久久久久久久99樱桃| 久久久99免费视频| 日韩视频在线一区二区三区| 久久精品国产综合| 夜夜夜久久久| 亚洲国产一区二区a毛片| 亚洲欧美日韩精品久久奇米色影视| 国产欧美日韩视频在线观看|