问题
//下面每对scanf格式串是否等价?
// _替代空格
//A."%d" F "_%d"
//B."%d-%d-%d" F "%d -%d -%d"
//C."%f" F "%f "
//D."%f,%f" F "%f, %f"
测试代码
#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个空格。