scanf中的空間是什么意思?#include <stdio.h>int main(int argc, char* argv[]) {
char c;
scanf(" %c", &c);
printf("%c\n", c);
return 0;}[root@test]# ./scanf
a
a[root@test]# ./scanf
h
h空間是否存在似乎總是匹配的,為什么?
3 回答

大話西游666
TA貢獻1817條經(jīng)驗 獲得超14個贊
%c不會像數(shù)字格式說明符那樣跳過空格字符。因此,如果您使用:
#include<stdio.h>int main(int argc, char* argv[]){ char c; scanf("%c", &c); printf("%c\n", c); scanf("%c", &c); // Try running with and without space printf("%c\n", c); return 0;}
輸入緩沖區(qū)中的前一個空格字符很有可能會在第二個scanf中被占用,并且您將沒有機會鍵入。%c之前的空格將使scanf跳過輸入緩沖區(qū)中存在的任何空白字符,以便您能夠正確輸入輸入。有時,為了達到人們寫的相同效果:
fflush(stdin);scanf("%c" &c);
但這被認為是非常糟糕的編程,因為C標準指定fflush(stdin)的行為未定義。因此,請始終在格式字符串中使用空格,除非您也有特殊原因要捕獲空格。

白衣染霜花
TA貢獻1796條經(jīng)驗 獲得超10個贊
空間scanf
格式的意思是“跳過所有空白”從當前位置。由于大多數(shù)scanf
格式說明符在嘗試讀取任何內(nèi)容之前已經(jīng)跳過了所有空格,因此scanf
大多數(shù)時間都不會在格式中使用空格。但是,當您使用不忽略空格的格式說明符時,在必要時(強制跳過)在格式中包含空格可能是有意義的。
不忽略空格的說明符是c
[
和n
。因此,在這些說明符之一之前指定一個空格會有所不同。否則,它沒有任何區(qū)別。在您的特定示例中,空白被特別忽略,因為您使用了scanf
格式的空格(因為您正在使用%c
)。嘗試刪除空間,然后看看會發(fā)生什么。

幕布斯7119047
TA貢獻1794條經(jīng)驗 獲得超8個贊
- 3 回答
- 0 關注
- 601 瀏覽
添加回答
舉報
0/150
提交
取消