讲解scanf小知识,这题需要注意一下scanf函数使用的一个小细节。

输入描述:

一行,3科成绩,用空格分隔,范围(0~100)。
题目里面有这样的输入描述,重点注意其中的“用空格分隔”。
对于scanf函数来说,第一个参数就是我们所说的字符串,因为他第一个参数是用双引号括上的。
而第一个参数内部的格式决定了你输入数据的格式。
就比如说
scanf("%d %d %d", &smb[0], &smb[1], &smb[2]);
这个scanf第一个参数内部的%d之间是用空格隔开的,所以在输入的时候也需要空格隔开的格式:60 80 90
再比如
scanf("%d,%d,%d", &smb[0], &smb[1], &smb[2]);
这个就是使用逗号隔开的,这个时候输入就需要使用逗号隔开:60,80,90
在举一个极端的例子
scanf("*%d$%d@#%d", &smb[0], &smb[1], &smb[2]);
这个scanf函数是使用*、$、@#来隔开这些%d所以在输入的时候应该这样输入:*60$80@#90
才是正确的。

最后说一下scanf函数使用的常见错误:
1.长度正确但是类型错误。(比如使用long long类型来装double类型,在vs编译器里都是8个字节)
2.输入数值大于转换类型取值范围。(比如输入2458956457,使用转换规则中的%hd来转换,%hd表示short类型的转换规则,short在vs内取值为-32767~32768)
3.变量放不下转换结果。(比如输入3294967295,这次使用%d的转换规则,转换完成后,保存在short内部,因为%d对应的是int类型,所以放不下)
有勤劳的同学可以将这几个错误试一下来加深印象。
具体转换规则可以百度或者看一下我的其他题解 。

下面附上我写的这题的题解
#include <stdio.h>

int main() {
    int smb[3] = {0};
    scanf("%d %d %d", &smb[0], &smb[1], &smb[2]);
    printf("score1=%d,score2=%d,score3=%d", smb[0], smb[1], smb[2]);
    return 0;
}