scanf 関数の一般的な問題とその解決策を解決する

王林
リリース: 2024-02-18 12:58:19
オリジナル
1068 人が閲覧しました

scanf 関数の一般的な問題とその解決策を解決する

C 言語の scanf 関数の一般的な問題と解決策についての深い理解

はじめに:
C 言語では、入力関数 scanf は次の 1 つです。最も一般的に使用される関数 まず、標準入力ストリームからユーザー入力を受け取るために使用されます。ただし、scanf 関数の特性と使用法が複雑であるため、いくつかの問題が頻繁に発生します。この記事では、scanf 関数の一般的な問題を詳しく紹介し、解決策と具体的なコード例を示します。

1. scanf 関数の戻り値
scanf 関数を使用する場合、戻り値に注意する必要があります。 scanf関数は読み込み、変換に成功した項目数を返しますが、戻り値がパラメータの数より少ない場合は、読み込みに失敗した入力値があることを意味します。この戻り値は、ユーザーの入力が正当であるかどうかを判断するためによく使用されます。以下はサンプル コードです:

#include <stdio.h>

int main() {
    int num1, num2, result;
    
    printf("请输入两个整数:");
    if (scanf("%d %d", &num1, &num2) != 2) {
        printf("输入错误,请输入两个整数。
");
        return 1;
    }
    
    result = num1 + num2;
    printf("两个整数的和为:%d
", result);
    
    return 0;
}
ログイン後にコピー

上記のコードでは、scanf 関数を使用してユーザーが入力した 2 つの整数を受け取ります。入力値が要件 (つまり 2 つの整数) を満たさない場合、エラーが発生します。メッセージが出力され、エラー コードが返されます。

2. scanf 関数の入力バッファリングの問題
scanf 関数は、入力時にユーザーが入力したデータを入力バッファーに入れ、書式文字列の規則に従って変換します。ただし、入力バッファの特性により、無限ループや不完全な読み取りなどの問題が発生しやすくなります。以下は、一般的な入力バッファリングの問題と解決策のサンプル コードです。

  1. 入力バッファをクリアします
#include <stdio.h>

int main() {
    int num;
    char ch;
    
    printf("请输入一个整数:");
    scanf("%d", &num);
    
    // 清空输入缓冲区
    while ((ch = getchar()) != '
' && ch != EOF);
    
    printf("输入的整数是:%d
", num);
    
    return 0;
}
ログイン後にコピー

上記のコードでは、ユーザーが整数を入力した場合、後で、余分な文字(文字など)が入力された場合、ループ内で入力バッファをクリアすることで、余分な文字が後続の入力に干渉するのを防ぐことができます。

  1. scanf 関数の代わりに fgets 関数を使用する
#include <stdio.h>

int main() {
    char name[20];
    
    printf("请输入您的姓名:");
    fgets(name, sizeof(name), stdin);
    
    printf("您的姓名是:%s
", name);
    
    return 0;
}
ログイン後にコピー

上記のコードでは、scanf 関数の代わりに fgets 関数を使用することで、文字列入力時の読み取り不完全を回避できます。 。

3. scanf 関数のフォーマット文字列に関する問題
scanf 関数のフォーマット文字列は、入力のフォーマットとタイプを示すために使用されます。使用する際は、書式文字列の正確性と合理性に注意を払う必要があります。以下は、いくつかの一般的な書式文字列の問題と解決策のサンプル コードです。

  1. 特定の文字を無視する
#include <stdio.h>

int main() {
    char ch;
    
    printf("请输入一个字符:");
    scanf(" %c", &ch);  // 注意前面的空格
    
    printf("输入的字符是:%c
", ch);
    
    return 0;
}
ログイン後にコピー

上記のコードでは、前に書式文字列があるため、スペースが追加されています。ユーザーが入力したスペースやタブなどの特殊文字を無視します。

  1. 入力の長さを制御する
#include <stdio.h>

int main() {
    char str[10];
    
    printf("请输入一个字符串(最多10个字符):");
    scanf("%9s", str);
    
    printf("输入的字符串是:%s
", str);
    
    return 0;
}
ログイン後にコピー

上記のコードでは、フォーマット文字列の文字列の長さを最大 9 文字に制限することでユーザー入力を回避しています。配列サイズを超えています。

概要:
この記事では、C 言語の scanf 関数に関する一般的な問題を深く理解し、解決策と具体的なコード例を示します。戻り値を合理的に使用し、入力バッファリングの問題を解決し、フォーマット文字列を制御することで、scanf 関数をより有効に活用し、よくある間違いを回避できます。この記事が、読者が scanf 関数を理解し、使用する一助になれば幸いです。

以上がscanf 関数の一般的な問題とその解決策を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート