1樓:匿名使用者
遇到不會讀的符號
複製到谷歌翻譯裡邊 他可以讀出來的
這個就是 and
2樓:匿名使用者
1.scanf函式的一般形式
scanf(格式控制,地址表列)
int scanf(char *format[,argument,...]);
「格式控制」的含義同printf函式;「地址表列」是由若干個地址組成的表列,可以是變數的地址,或字串首地址。
scanf()函式返回成功賦值的資料項數,出錯時則返回eof。
例題 scanf函式輸入資料。
#include
void main()
格式字元 說明
%a 讀入一個浮點值(僅c99有效)
%a 同上
%c 讀入一個字元
%d 讀入十進位制整數
%i 讀入十進位制,八進位制,十六進位制整數
%o 讀入八進位制整數
%x 讀入十六進位制整數
%x 同上
%c 讀入一個字元
%s 讀入一個字串
%f 讀入一個浮點數
%f 同上
%e 同上
%e 同上
%g 同上
%g 同上
%p 讀入一個指標
%u 讀入一個無符號十進位制整數
%n 至此已讀入值的等價字元數
% 掃描字符集合
%% 讀%符號
附加格式說明字元表修飾符 說明l/l 長度修飾符 輸入"長"資料
h 長度修飾符 輸入"短"資料
w 整型常數 指定輸入資料所佔寬度
* 星號 空讀一個資料
hh,ll同上h,l但僅對c99有效。
(b) 空白字元空白字元會使scanf()函式在讀操作中略去輸入中的一個或多個空白字元,空白符可以是space,tab,newline等等,直到第一個非空白符出現為止。(c) 非空白字元一個非空白字元會使scanf()函式在讀入時剔除掉與這個非空白字元相同的字元。
注:scanf()控制串知識就介紹到這裡(應該比較齊全了^_^),如有遺漏下次補上。下面將結合實際例程,一一闡述.
三、 scanf()函式的控制串的使用例1.#include "stdio.h"
int main(void)
執行時按如下方式輸入三個值:3□4□5 ↙(輸入a,b,c的值)3,4,5 (printf輸出的a,b,c的值) (1) &a、&b、&c中的&是地址運算子,分別獲得這三個變數的記憶體地址。
(2) "%d%d%d"是按十進值格式輸入三個數值。輸入時,在兩個資料之間可以用一個或多個空格、tab鍵、回車鍵分隔。
以下是合法輸入方式:
① 3□□4□□□□5↙
② 3↙
4□5↙
③ 3(tab鍵)4↙
5↙例2.#include "stdio.h"
int main(void)
執行時按如下方式輸入三個值:3,4,5 ↙(輸入a,b,c的值)或者3,□4,□5 ↙(輸入a,b,c的值)3,□□□4,□5 ↙(輸入a,b,c的值)
......
都是合法的,但是","一定要跟在數字後面,如:
3□,4,□5 ↙就非法了,程式出錯。(解決方法與原因後面講)再如:1、sacnf()中的變數必須使用地址。 int a, b;
scanf("%d%d",a,b); //錯誤
scanf("%d%d",&a,&b);2、scanf()的格式控制串可以使用其它非空白字元,但在輸入時必須輸入這些字元。例:
scanf("%d,%d",&a,&b);
輸入: 3,4 ↙(逗號與"%d,%d"中的逗號對應)
scanf("a=%d,b=%d",&a,&b);
輸入: a=3,b=4 ↙("a=","b=",逗號與"%d,%d"中的"a=","b="及逗號對應)
3、在用"%c"輸入時,空格和「轉義字元」均作為有效字元。例:
scanf("%c%c%c",&c1,&c2,&c3);
輸入:a□b□c↙
結果:a→c1,□→c2,b→c3 (其餘被丟棄)
scanf()函式接收輸入資料時,遇以下情況結束一個資料的輸入:(不是結束該scanf函式,scanf函式僅在每一個資料域均有資料,並按回車後結束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。問題二:scanf()函式不能正確接受有空格的字串?如: i love you!
#include
int main()
輸入:i live you!
輸出:i scanf()函式接收輸入資料時,遇以下情況結束一個資料的輸入:(不是結束該scanf函式,scanf函式僅在每一個資料域均有資料,並按回車後結束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。所以,上述程式並不能達到預期目的,scanf()掃描到"i"後面的空格就認為對str的賦值結束,並忽略後面的"love you!".
這裡要注意是"love you!"還在鍵盤緩衝區(關於這個問題,網上我所見的說法都是如此,但是,我經過除錯發現,其實這時緩衝區字串首尾指標已經相等了,也就是說緩衝區清空了,scanf()函式應該只是掃描stdin流,這個殘存資訊是在stdin中)。我們改動一下上面的程式來驗證一下:
#include
int main()
輸入:i love you!
輸出:i
love
you!好了,原因知道了,那麼scanf()函式能不能完成這個任務?回答是:
能!別忘了scanf()函式還有一個 % 格式控制符(如果對%不瞭解的請檢視本文的上篇),請看下面的程式:#include "stdio.
h"int main()
問題三:鍵盤緩衝區殘餘資訊問題
#include
int main()
while(c!='n');
} scanf("%c",&c);這句不能正常接收字元,什麼原因呢?我們用printf("c=%d\n",c);將c用int表示出來,啟用printf("c=%d\n",c);這一句,看看scanf()函式賦給c到底是什麼,結果是 c=10 ,ascii值為10是什麼?換行即\n.
對了,我們每擊打一下"enter"鍵,向鍵盤緩衝區發去一個「回車」(\r),一個「換行"(\n),在這裡\r被scanf()函式處理掉了(姑且這麼認為吧^_^),而\n被scanf()函式「錯誤」地賦給了c.解決辦法:可以在兩個scanf()函式之後加個fflush(stdin);,還有加getch(); getchar();也可以,但是要視具體scanf()語句加那個,這裡就不分析了,讀者自己去摸索吧。
但是加fflush(stdin);不管什麼情況都可行。函式名: fflush
功 能: 清除一個流
用 法: int fflush(file *stream);#include
int main()
while(c!='n');
} 這裡再給一個用「空格符」來處理緩衝區殘餘資訊的示例:執行出錯的程式:#include
int main()
}使用了空格控制符後:#include
int main()
} 可以執行看看兩個程式有什麼不同。問題四 如何處理scanf()函式誤輸入造成程式死鎖或出錯?#include
int main()
如上程式,如果正確輸入a,b的值,那麼沒什麼問題,但是,你不能保證使用者每一次都能正確輸入,一旦輸入了錯誤的型別,你的程式不是死鎖,就是得到一個錯誤的結果,呵呵,這可能所有人都遇到過的問題吧?解決方法:scanf()函式執行成功時的返回值是成功讀取的變數數,也就是說,你這個scanf()函式有幾個變數,如果scanf()函式全部正常讀取,它就返回幾。
但這裡還要注意另一個問題,如果輸入了非法資料,鍵盤緩衝區就可能還個有殘餘資訊問題。正確的例程:#include
int main()
{int a,b,c; /*計算
c=a+b;
printf("%d+%d=%d",a,b,c);
自己網上學習啊,不要看都不看就問問題
3樓:匿名使用者
對的,就是讀英文單詞and[ænd] 中文差不多就是 俺的
C語言中如何取整,C語言中取整是怎麼取?
茅玉枝稅子 參與運算量均為整型時,結果也為整型,捨去小數。如果運算量中有一個是實型,則結果為雙精度實型。printf d,d n 10 3,10 3 printf f,f n 10.0 3,10.0 3 c語言有以下幾種取整方法 1 直接賦值給整數變數。如 inti 2.5 或i int 2.5 這...
用C語言取數值的的中間值,用C語言取5個數值的的中間值
include stdio.h define count 5 void main int t count 2 printf d arra t 這個拿來幹嘛呢!lz 誰拿個錯的上來糊弄人啊!你既然搞了個count出來也不賦值,也不考慮多種情況! 看怎麼理解這個題目,取位置處於中間的一個數。偽碼是 if...
c語言中取隨機數的函式,C語言中取隨機數的函式
韌勁 1.基本函式 在c語言中取隨機數所需要的函式是 int rand void void srand unsigned int n rand 函式和srand 函式被宣告在標頭檔案stdlib.h中,所以要使用這兩個函式必須包含該標頭檔案 include 2.使用方法 rand 函式返回0到ran...