Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1

    Các bạn giúp mình vấn đề về struct!

    Chương trình của em như sau nhập vào thông tin của n sinh viên(bao gồm tên và tuổi) và in ra thông tin của n sinh viên đó. Em code như sau:

    Mã:
    #include <stdio.h>#include <string.h>typedef struct sinhvien{        char hoten[30];        int tuoi;};int main(){         struct sinhvien sv[100];        int n, i, x;        char buf[30];        printf("Nhap so sinh vien: "); scanf("%d", &n);        for (i=0; i<n; i++)        {                printf("Nhap thong tin sinh vien %d
    ", i+1);                printf("Ho ten: ");                gets(buf);                strcpy(sv[i].hoten, buf);                printf("
    Tuoi: "); scanf("%d", &x);                sv[i].tuoi = x;        }        for (i=0; i<n; i++)        {                puts(sv[i].hoten);                printf("
    Tuoi: %d", sv[i].tuoi);        }        return 0;}
    Tuy nhiên khi chạy chương trình thì nó hiển thị như sau:
    Mã:
    Nhap so sinh vien: 2
    Nhap thong tin sinh vien 1
    Ho ten: 
    Tuoi:
    và không cho mình nhập vào họ tên. Các bác sửa giúp em với.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thanks bạn. Vậy có nghĩa là muốn chương trình dừng lại cho mình nhập dữ liệu thì trong vòng for ta phải dùng kiểu char hết phải không nhỉ.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 20
    typedef struct{
    	char hoten[1000];
    	int tuoi;
    }sinhvien;
    int main(int argc, char *argv[])
    {
    	sinhvien sv[MAX];
    	int i,n;
    	char buf[1000];
    	printf("Nhap so hoc sinh");
    	gets(buf);
    	n=atoi(buf);
    	for(i=0;i<n;i++)
    	{
    		printf("Ho Va Ten %d",i+1);
    		gets(sv[i].hoten);
    		printf("Tuoi ");
    		gets(buf);
    		sv[i].tuoi=atoi(buf);
    	}
    	printf("
    *************");
    	for(i=0;i<n;i++)
    		printf("
    Ho Ten %s Tuoi %d",sv[i].hoten,sv[i].tuoi);
    	return 0;
    }

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi huylvt
    Thanks bạn. Vậy có nghĩa là muốn chương trình dừng lại cho mình nhập dữ liệu thì trong vòng for ta phải dùng kiểu char hết phải không nhỉ.
    Không phải thế đâu bạn .

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    về mặt code thì mình nghĩ là không sai..nhưng nó bị lỗi gì gì đó của 2 hàm nhập là gets với scanf
    ở đây mình dùng chung là kiểu dữ liệu char cho cả số nguyên và kiểu chuỗi
    và dùng atoi để lấy phần kiểu nguyên của kiểu chuỗi..
    và chỉ sử dụng gets và không sử dụng scanf

  6. #6
    Ngày tham gia
    Sep 2015
    Đang ở
    Số 60 Thái Hà, Đống Đa, Hà Nội
    Bài viết
    0
    Trích dẫn Gửi bởi huylvt
    Chương trình của em như sau nhập vào thông tin của n sinh viên(bao gồm tên và tuổi) và in ra thông tin của n sinh viên đó. Em code như sau:

    Mã:
    #include <stdio.h>#include <string.h>typedef struct sinhvien{        char hoten[30];        int tuoi;};int main(){         struct sinhvien sv[100];        int n, i, x;        char buf[30];        printf("Nhap so sinh vien: "); scanf("%d", &n);        for (i=0; i<n; i++)        {                printf("Nhap thong tin sinh vien %d
    ", i+1);                printf("Ho ten: ");                gets(buf);                strcpy(sv[i].hoten, buf);                printf("
    Tuoi: "); scanf("%d", &x);                sv[i].tuoi = x;        }        for (i=0; i<n; i++)        {                puts(sv[i].hoten);                printf("
    Tuoi: %d", sv[i].tuoi);        }        return 0;}
    Tuy nhiên khi chạy chương trình thì nó hiển thị như sau:
    Mã:
    Nhap so sinh vien: 2
    Nhap thong tin sinh vien 1
    Ho ten: 
    Tuoi:
    và không cho mình nhập vào họ tên. Các bác sửa giúp em với.
    Đối với code này của bạn thì có 2 cách sửa:

    1/ Không sử dụng biến buf mà sử dụng hàm gets nhập thẳng dữ liệu vào biến trong struct
    2/ Sử dụng hàm 2 lần hàm sau đây, một đặt ở đầu vòng lẵp for cái còn lại ở sau hàm gets
    Mã:
    fflush(stdin);

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •