Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Tại sao trình biên dịch không đọc chuỗi sau số nguyên trong C?


Vấn đề

Trình biên dịch không đọc chuỗi sau số nguyên trong C? Làm sao khắc phục?

Giải pháp

Khi bạn nhập số nguyên và nhấn Enter để đọc giá trị tiếp, trình biên dịch lưu ký tự null vào ký tự đầu tiên của chuỗi và kết thúc nhập chuỗi. Vì scanf dừng khi gặp ký tự null.

Cách giải quyết?

Khi đọc chuỗi hoặc ký tự sau int/float, ta nên đọc một ký tự tạm thời có trong bộ đệm nhập.

Chương trình không lỗi sau:

Ví dụ

#include <stdio.h>
struct student {
    char name[10];
    int roll;
    char temp;
} s;
int main() {
    printf("Nhap thong tin sinh vien:\n");
    printf("\nNhap ma so: ");
    scanf("%d", &s.roll);
    scanf("%c", &s.temp); // đọc ký tự tạm
    printf("\nNhap ten: ");
    gets(s.name);
    printf("\nHien thi thong tin sinh vien:\n");
    printf("\nMa so: %d\t", s.roll);
    printf("\nTen: %s\t", s.name);
    return 0;
}

Kết quả

Nhap thong tin sinh vien:
Nhap ma so: 3
Nhap ten: tutorialspoint
Hien thi thong tin sinh vien:
Ma so: 29806
Ten: tutorialspoint