用scanf_s判斷輸入資料是否合法

Adalight發表於2021-05-16

用scanf_s判斷輸入資料是否合法

對使用者輸入的整數進行求和。當使用者輸入任意字元時,結束程式並列印結果。
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);
	}
	while (status == 1);
	cout << "結果是:" << sum << endl;


	system("pause");
	return 0;
}

scanf_s函式會返回成功接收字元的個數,所以我們只需檢查每次呼叫 scanf_s函式的返回值是否為 1 即可。

相關文章