C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でユーザー入力のデータ型を判定するプログラムの作り方

この記事では、ユーザーから受け取った入力値が「整数」「浮動小数点数」「文字列」のどれに該当するのかを自動的に判別するC++プログラムの作成方法を解説します。

問題の概要

ユーザーからの入力を受け取り、その入力値がどのデータ型に属するかを判定します。

例1

  • 入力: 34
  • 出力: 整数です

例2

  • 入力: tutorialspoint
  • 出力: 文字列です

解決アプローチ

判定の手順は以下の通りです。

  1. まず、入力された文字列が数値として解釈できるかどうかを確認します。
  2. 数値である場合は、さらに整数なのか浮動小数点数なのかを判定します。
  3. 数値として解釈できない場合は、文字列と判断します。

サンプルコード

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
    char input[50] = "";
    double temp;
    int intVal;
    char stringVal[50] = "";
    double val = 1e-12;
    fgets(input, 100, stdin);
    if (sscanf(input, "%lf", &temp) == 1) {
        intVal = (int)temp;
        if (fabs(temp - intVal) / temp > val)
            printf("The input is a floating point\n");
        else
            printf("The input is an integer\n");
    }
    else if (sscanf(input, "%s", stringVal) == 1)
        printf("The input is a string\n");
    else
        printf("input not recognized\n");
}

コードの解説

このプログラムでは、fgets()を使って標準入力から文字列を読み込みます。次にsscanf()%lf(倍精度浮動小数点数)として解析を試みます。解析に成功した場合、元の値と整数にキャストした値の差分を計算し、その相対誤差が閾値(1e-12)より大きければ浮動小数点数、そうでなければ整数と判定します。%lfでの解析に失敗した場合は、%sで文字列として読み取れるかを確認し、文字列と判定します。

実行例

入力:

452

出力:

The input is an integer

このように、数値解析と誤差比較を組み合わせることで、ユーザー入力のデータ型を簡単に判別することができます。

  1. C++で三角形の重心を求めるプログラムの作成方法

    この記事では、三角形の3つの頂点の座標を格納した2次元配列が与えられたときに、その三角形の重心を求めるC++プログラムの作成方法を解説します。 三角形の重心とは、三角形の3本の中線がすべて交わる点のことです。 また、三角形の中線とは、ある頂点と、その対辺(向かい合う辺)の中点を結ぶ線分のことを指します。 それでは、具体的な例を使って問題を確認してみましょう。 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-1.5, -1) 説明 重心 (x, y) = ((-3 + 1.5 - 3) / 3, (1 + 0 - 4) / 3) = (-1.5, -1) 解法のアプロ

  2. C++で平行四辺形の面積を求めるプログラムの作成方法

    この記事では、平行四辺形の底辺と高さを表す2つの値が与えられたとき、C++を使ってその面積を求めるプログラムを作成する方法を解説します。 平行四辺形とは? 平行四辺形とは、4つの辺からなる閉じた図形であり、向かい合う2組の辺がそれぞれ長さが等しく、互いに平行になっている四角形のことです。 問題を理解するための具体例 入力 B = 20, H = 15 出力 300 説明 平行四辺形の面積 = 底辺 × 高さ = 20 × 15 = 300 解決アプローチ この問題を解くには、平行四辺形の面積を求める幾何学の公式を使用します。 面積 = 底辺 × 高さ つまり、与えられた底辺と高さを掛け合わせ