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
whitespace
như newline thì nó dừng chứ không “ăn” cáiwhitespace
đó nên lần sau gọifgets
thì nó vẫn gặp newline nên bỏ qua luôn bước nhập đầu tiên.Giải pháp:
whitespace
đó.scanf
sucks:@Viet_Hung_Vu: không in
0
vìi
đã được tăng 1 tại hàmprintStudent