一. scanf 函數輸入格式中的字符串
scanf 函數輸入格式中也可以含有普通字符串,但他的含義是這些字符必須在輸入中出現,例如:
int num;
scanf("hello %d", &num);
他的含義是首先要求輸入一個hello字符串,然後再輸入一個十進制數。 注意在等待輸入時忽略hello與要輸入的數之間的空格,制表符,回車。
因此這兩種輸入都是正確的: hello 1234 hello1234
二. scanf函數的返回值
程序:
{
int num, result=0;
printf("please input the student’s score: ");
while(result==0) {
/* 清空輸入緩沖區。 */
fflush(stdin);
if(result!=1) printf("Please input a digital score: ");
result=scanf("%d",&num);
}
}
一切OK!
三. scanf函數中一個參數的應用
在 scanf 函數中,我們可以使用 %c 來讀取一個字符,使用 %s 讀取一個字符串。 但是讀取字符串時不忽略空格,讀字符串時忽略開始的空格,並且讀到空格為止,因此我們只能讀取一個單詞,而不是整行字符串。因此一般使用 fgets 來讀取一個字符串。
其實 scanf 函數也可完成這樣的功能,而且還更強大。 這裡主要介紹一個參數:%[] ,這個參數的意義是讀入一個字符集合。 [] 是個集合的標志,因此 %[] 特指讀入此集合所限定的那些字符, 比如 %[A-Z] 是輸入大寫字母,一旦遇到不在此集合的字符便停止。 如果集合的第一個字符是"^", 這說明讀取不在 "^" 後面集合的字符,既遇到 "^" 後面集合的字符便停止。注意此時讀入的字符串是可以含有空格的。 Eg: 輸入一個字符串, 這個字符串只含有小寫字符。遇到第一個不是小寫字符時停止, scanf("%[a-z], str); Eg: 想輸入一個字符串, 遇到 "." 停止,可設計如下: scanf("%[^.]", str); 使用這個參數,你可以完成許多強大的功能呦!
通常來講,scanf 函數和他的一些參數並不是很常用,主要是因為:
1. 許多系統的 scanf 函數都有漏洞。 (典型的就是TC再輸入浮點型時有時會出錯)。
2. 用法復雜,容易出錯。
3. 編譯器作語法分析時會很困難,從而影響目標代碼的質量和執行效率。