问题

    //下面每对scanf格式串是否等价?
    // _替代空格
    //A."%d" F "_%d"
    //B."%d-%d-%d" F "%d -%d -%d"
    //C."%f" F "%f "
    //D."%f,%f" F "%f, %f"

1665493772303.jpg

测试代码

#include <stdio.h>
int main()
{
    printf("A选项设置");
    int i1=0,i2=0,i3=0;
    scanf_s(" %d",&i1);
    scanf_s(" %d", &i2);
    printf("%d\n", i1);
    printf("%d\n", i2);
    //
    printf("B选项设置");
    scanf_s("%d-%d-%d", &i1, &i2, &i3);
    printf("%d-%d-%d", i1, i2, i3);
    scanf_s("%d -%d -%d", &i1, &i2, &i3);
    printf("%d -%d -%d", i1, i2, i3);
    //
    float f_test_1=0.0;
    printf("C选项设置");
    scanf_s("%f", &f_test_1);
    printf("%f", f_test_1);
    scanf_s("%f ", &f_test_1);
    printf("%f ", f_test_1);
    //
    float f_test_2 = 0.0;
    printf("D选项设置");
    scanf_s("%f,%f", &f_test_1, &f_test_2);
    printf("%f,%f", f_test_1, f_test_2);
    scanf_s("%f, %f", &f_test_1, &f_test_2);
    printf("%f, %f", f_test_1, f_test_2);
}

分析

(A) 等价,因为scanf在开始寻找数的时候会忽略掉空格,所以即使在前面添加任意个空格均不影响结果。

(B)不等价,虽然在开始是是scanf会忽略掉空格,但是开始读入之后并不会忽略。所以前者%d-%d-%d中不能在“-”之间加入任何空格,否则会异常退出,而后者%d -%d -%d则可以在“-”之间加入或不加入任意个空格

(C)不等价,第二个格式串中以空格作为结尾,虽然不影响录入%f中的数字,但是第二个格式串并不会在回车或空格后结束,它会一直等到读入第一个非空字符时才会结束。而第一个%f会在遇到空格或回车之类的符号后就结束运行。

(D)不等价,与(B)理由相同,第一个格式串中逗号直接不能加入任何空格,而第二个则可以加入0个或n个空格。

最后修改:2022 年 10 月 11 日
如果觉得我的文章对你有用,只需评论或转发支持,谢绝投喂!