01/10/2018, 14:16
Sử dụng hàm fgets để nhập struct nhưng khi in bị mất phần tử đầu tiên
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct STUDENT {
char hoten[30];
}Student;
void ReadStudent(Student std[],int n)// nhap ten hoc sinh
{
for(int i =0; i<n; i++)
{
printf("Nhap ten cho hoc sinh thu %d.
", i+1);
fgets(std[i].hoten, 30,stdin);
}
}
char tachChuCaiDau(char hoten[]){//tach chu cai dau cua ten
int i =strlen(hoten)-1;
while(hoten[i] != ' ') i --;
return hoten[i+1];
}
char *tachTen(char hoten[]){//tach ten
int i = strlen(hoten)-1;
while(hoten[i]!= ' ') i--;
return &hoten[i+1];
}
Student *arrangeStudent(Student std[],int n)// sap xep hoc sinh theo abc
{
Student temp;
//so sanh vs [i+1]
//neu ... thi doi cho
for(int i =0; i< n-1; i++){
for(int j = i+1; j< n; j++){
if((int)tachChuCaiDau(std[i].hoten)>(int)tachChuCaiDau(std[i+1].hoten))
{
temp = std[i];
std[i] = std[j];
std[j] = temp;
}
}
}
return std;
}
void printStudent(Student *std,int n)// in hoc sinh theo sap xep
{
printf("%-50s%-20s
","Number","Name");
for(int i=0; i<n; i++){
printf("%-50d%-20s",i+1,(std+i)->hoten);
printf("
");
}
}
int main()
{
int num;
printf("Input number of student: ");
scanf("%d",&num);
Student std[num];
ReadStudent(std, num);
arrangeStudent(std, num);
printStudent(std,num);
return 0;
}
Bài liên quan





Không hiện phần tử hoc sinh thu 0
Vấn đề nằm ở
scanf:Vì khi nó gặp
whitespacenhư newline thì nó dừng chứ không “ăn” cáiwhitespaceđó nên lần sau gọifgetsthì nó vẫn gặp newline nên bỏ qua luôn bước nhập đầu tiên.Giải pháp:
whitespaceđó.scanfsucks:@Viet_Hung_Vu: không in
0vìiđã được tăng 1 tại hàmprintStudent