【C言語】scanf以外で文字列や数値を入力する方法

C言語で文字列や数値を入力する方法は、scanf以外にもいくつかあります。

本記事では、scanf以外の方法を使って、安全かつ柔軟な入力処理を行う方法を紹介します。

目次から探す

scanfを使わない文字列の入力方法

文字列の入力には、以下の3つの方法があります。

gets関数を使った文字列の入力

#include <stdio.h>
int main() {
    char str[100];
    
    printf("文字列を入力してください: ");
    gets(str);
    
    printf("入力された文字列は: %s\n", str);
    
    return 0;
}

gets関数はセキュリティ上の問題があるため、使用は推奨されません。

fgets関数を使った文字列の入力

#include <stdio.h>
int main() {
    char str[100];
    
    printf("文字列を入力してください: ");
    fgets(str, sizeof(str), stdin);
    
    printf("入力された文字列は: %s\n", str);
    
    return 0;
}

fgets関数は改行文字も読み込むため、文字列の末尾に改行文字が含まれます。

getchar関数を使った文字列の入力

#include <stdio.h>
int main() {
    char str[100];
    int i = 0;
    char c;
    
    printf("文字列を入力してください: ");
    while ((c = getchar()) != '\n') {
        str[i] = c;
        i++;
    }
    str[i] = '\0';
    
    printf("入力された文字列は: %s\n", str);
    
    return 0;
}

getchar関数は1文字ずつ読み込むため、改行文字は読み込まれません。

scanfを使わない数値の入力方法

数値の入力には、以下の3つの方法があります。

getchar関数を使った数値の入力

#include <stdio.h>
int main() {
    int num = 0;
    int c;
    
    printf("数値を入力してください: ");
    while ((c = getchar()) != '\n') {
        num = num * 10 + (c - '0');
    }
    
    printf("入力された数値は: %d\n", num);
    
    return 0;
}

fgets関数とatoi関数を使った数値の入力

#include <stdio.h>
#include <stdlib.h>
int main() {
    char str[100];
    int num;
    
    printf("数値を入力してください: ");
    fgets(str, sizeof(str), stdin);
    
    num = atoi(str);
    
    printf("入力された数値は: %d\n", num);
    
    return 0;
}

atoi関数は文字列を整数に変換するために使用されます。

sscanf関数を使った数値の入力

#include <stdio.h>
int main() {
    char str[100];
    int num;
    
    printf("数値を入力してください: ");
    fgets(str, sizeof(str), stdin);
    
    sscanf(str, "%d", &num);
    
    printf("入力された数値は: %d\n", num);
    
    return 0;
}

sscanf関数は書式指定子を使用して文字列から変数に値を読み込むために使用されます。

本記事では、gets関数fgets関数getchar関数を使った文字列の入力方法、getchar関数fgets関数atoi関数sscanf関数を使った数値の入力方法を紹介しました。

これらの方法を使うことで、より安全かつ柔軟な入力処理を実現することができます。

目次から探す