用scanf_s判断输入数据是否合法
用scanf_s判断输入数据是否合法
1.0版本
写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果。
程序实现如下:

scanf_s函数会返回成功接收字符的个数,所以我们只需检查每次调用 scanf_s函数的返回值是否为 1 即可。
代码实现:
#include <iostream>
#include<cstdio>
int main()
{
int num = 0;
long sum = 0L; // 0L表示类型为long的0
int status;
do
{
cout<<"请输入合法的数字:;
sum = sum + num;
status = scanf("%d", &num);
} while(status == 1);
printf("结果是:%ld\n", sum);
system("pause");
return 0;
}
2.0版本
为上一题的数字求和程序写一个 2.0 版本,请实现以下要求:
A. 用户可以输入整数和浮点数
B. 用户可以在同一行输入多个数字,数字之间可以是任意一个分隔符(如下图)
C. 结果保留两位小数
程序实现如下图:

答:要求 A 不难实现,统一将用户输入的数转换为浮点型即可(整数到浮点型的转换是无损的);要求 B 则需要我们检测用户是输入了数字之后是否按下了回车(检测是否存在换行符)。因此,我们需要嵌套一个内循环来处理那些一行包含多组数字的情况。
代码实现:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
float num = 0;
double sum = 0;
int status;
do
{
cout << "请输入合法的数字:";
do
{
sum += num;
status = scanf_s("%f", &num);
}
while (getchar() != '\n'&& status == 1);//只有输入不为回车且scanf_s函数只接收到一个字符时,才会进行内层循环;当输入回车时,根据短路求值原理,后面语句将不再做判断;当输入空格或其他字符时继续循环
}
while (status == 1);//当输入其他字符时,退出循环,只有输入数字时,外层循环才会继续。
printf("结果是:%.2lf\n", sum);
system("pause");
return 0;
}
更多c++代码小技巧和经典代码请点击这里

浙公网安备 33010602011771号