Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menganalisis isu format input biasa bagi fungsi scanf bahasa C

Menganalisis isu format input biasa bagi fungsi scanf bahasa C

王林
王林asal
2024-02-19 09:30:08754semak imbas

Menganalisis isu format input biasa bagi fungsi scanf bahasa C

Analisis soalan lazim tentang format input scanf bahasa C

Dalam proses pengaturcaraan dalam bahasa C, fungsi input adalah sangat penting untuk perjalanan program. Kami sering menggunakan fungsi scanf untuk menerima input pengguna. Walau bagaimanapun, disebabkan kepelbagaian dan kerumitan input, beberapa masalah biasa mungkin timbul apabila menggunakan fungsi scanf. Artikel ini akan menganalisis beberapa isu format input scanf biasa dan memberikan contoh kod khusus.

  1. Aksara input tidak sepadan dengan format
    Apabila menggunakan fungsi scanf, kita perlu menentukan format input. Contohnya, "%d" bermaksud memasukkan integer dan "%f" bermaksud memasukkan nombor titik terapung. Ralat input berlaku apabila aksara yang dimasukkan oleh pengguna tidak sepadan dengan format yang ditentukan. Berikut ialah contoh kod:
#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    printf("您输入的整数是:%d
", num);
    return 0;
}

Apabila pengguna memasukkan aksara bukan angka, atur cara tidak akan dapat membaca input pengguna dengan betul, mengakibatkan hasil output yang salah. Untuk menyelesaikan masalah ini, kita boleh menggunakan gelung dan pernyataan bersyarat untuk mengendalikan input yang salah.

#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数:");
    while (scanf("%d", &num) != 1) {
        printf("输入错误,请重新输入:");
        while (getchar() != '
');
    }
    printf("您输入的整数是:%d
", num);
    return 0;
}

Dalam contoh ini, kami menentukan sama ada format input adalah betul dengan menyemak nilai yang dikembalikan oleh fungsi scanf. Jika salah, kami menggunakan gelung sementara untuk mengosongkan penimbal input daripada aksara haram dan menggesa semula pengguna untuk input.

  1. Masalah dengan ruang atau baris baharu sebelum dan selepas
    Pengguna mungkin secara tidak sengaja menambah ruang atau baris baharu sebelum dan selepas memasukkan. Jika kami menggunakan fungsi scanf untuk membaca input, ruang atau baris baharu ini mungkin tersilap dikenali sebagai aksara yang sah, menyebabkan ralat program. Sebagai contoh, kod berikut secara salah mengenal pasti dua input sebagai pembolehubah yang sama.
#include <stdio.h>

int main() {
    int num1, num2;
    printf("请输入两个整数,用空格分隔:");
    scanf("%d%d", &num1, &num2);
    printf("您输入的两个整数是:%d和%d
", num1, num2);
    return 0;
}

Untuk menyelesaikan masalah ini, kita boleh menambah ruang pada rentetan format untuk melangkau ruang hadapan dan belakang serta baris baharu.

#include <stdio.h>

int main() {
    int num1, num2;
    printf("请输入两个整数,用空格分隔:");
    scanf(" %d%d", &num1, &num2);
    printf("您输入的两个整数是:%d和%d
", num1, num2);
    return 0;
}

Dalam contoh ini, kami menambah ruang di hadapan "%d" supaya fungsi scanf akan melangkau ruang sebelumnya atau aksara baris baharu.

  1. Masalah penimbal input
    Dalam bahasa C, operasi input akan menyimpan aksara input dalam penimbal input. Setiap kali fungsi scanf membaca input, ia mengekstrak aksara daripada penimbal. Jika terdapat aksara yang tidak diekstrak dalam penimbal, fungsi scanf akan terus menggunakan aksara dalam penimbal tanpa menunggu input pengguna. Ini boleh membawa kepada hasil yang tidak dijangka. Berikut adalah contoh biasa:
#include <stdio.h>

int main() {
    int num;
    char ch;
    printf("请输入一个整数和一个字符:");
    scanf("%d", &num);
    scanf("%c", &ch);
    printf("您输入的整数是:%d
", num);
    printf("您输入的字符是:%c
", ch);
    return 0;
}

Apabila kita menjalankan program ini dan memasukkan integer dan aksara, kita akan mendapati bahawa atur cara itu tamat secara langsung tanpa menunggu kita memasukkan watak tersebut. Ini kerana selepas memasukkan integer, masih terdapat aksara baris baharu dalam penimbal input yang belum diekstrak, menyebabkan fungsi scanf kedua menggunakan terus aksara baris baharu dengan panjang 1. Untuk mengelakkan ini, kita boleh menambah %c dengan ruang untuk melangkau baris baharu dalam penimbal input.

#include <stdio.h>

int main() {
    int num;
    char ch;
    printf("请输入一个整数和一个字符:");
    scanf("%d", &num);
    scanf(" %c", &ch);
    printf("您输入的整数是:%d
", num);
    printf("您输入的字符是:%c
", ch);
    return 0;
}

Dalam contoh ini, kami menambah ruang sebelum "%c" pada rentetan format supaya fungsi scanf akan melangkau baris baharu dalam penimbal input.

Melalui analisis dan contoh kod di atas, kami boleh lebih memahami masalah biasa format input scanf bahasa C, dan belajar menangani masalah ini dengan munasabah untuk meningkatkan keteguhan dan pengalaman pengguna program. Dalam pengaturcaraan sebenar, kami juga perlu melaraskan kod mengikut keperluan khusus dan senario input untuk memastikan input pengguna dibaca dengan betul.

Atas ialah kandungan terperinci Menganalisis isu format input biasa bagi fungsi scanf bahasa C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn