题目
有以下语句:int b;char c[10];,则正确的输入语句是______。A. scanf("% d % s", &b, &c);B. scanf("% d % s", &b, c);C. scanf("% d % s", b, c);D. scanf("% d % s", b, &c);
有以下语句:int b;char c[10];,则正确的输入语句是______。
A. scanf("% d % s", &b, &c);
B. scanf("% d % s", &b, c);
C. scanf("% d % s", b, c);
D. scanf("% d % s", b, &c);
题目解答
答案
B. scanf("% d % s", &b, c);
解析
本题考查C语言中scanf函数的正确使用,核心在于理解格式说明符与变量的对应关系。关键点包括:
int类型变量必须用地址&取值,对应格式说明符%d;- 字符数组作为参数时,数组名本身代表地址,无需额外取地址,对应格式说明符
%s; - 选项中若出现类型与格式说明符不匹配的情况,必然错误。
选项分析
选项A
scanf("% d % s", &b, &c);
- 错误原因:第二个参数
&c试图取字符数组的地址,但c本身已是地址(数组名),&c会生成“指向数组的指针的指针”,与%s不匹配。
选项B
scanf("% d % s", &b, c);
- 正确性分析:
&b正确提供int变量的地址,匹配%d;c直接作为字符数组名,隐式转换为地址,匹配%s。
选项C
scanf("% d % s", b, c);
- 错误原因:
b未取地址,%d期望地址但得到int值,导致类型错误。
选项D
scanf("% d % s", b, &c);
- 错误原因:
b未取地址,且&c同选项A的问题。