#c
Вопрос:
Извините за языковую разницу, спасибо
В первом я ввел данные ( программа для ввода данных ученика , учитель попросил использовать .txt )
#include"stdio.h" #include"stdlib.h" #include"string.h" void delete_n(char a[]){ size_t x=strlen(a); if(a[strlen(a)-1]=='n'){ a[strlen(a)-1]=''; } } struct age{ char id[10]; char name[50]; int numb; int score; }; void sx(age dnu[], int n){ age a; for(int i=0;ilt;n;i ){ for(int j=i 1;jlt;n;j ){ if(dnu[i].numblt;dnu[j].numb){ a=dnu[i]; dnu[i]=dnu[j]; dnu[j]=a; } } } } void file(age dnu[],int n){ FILE *f; f = fopen("ex3","w"); if(f==NULL){ printf("Error"); exit(0); } fprintf(f,"%dn",n); for(int i=0;ilt;n;i ){ fprintf(f," %sn",dnu[i].id); fprintf(f,"%sn",dnu[i].name); fprintf(f," %d n",dnu[i].numb); fprintf(f," %d n",dnu[i].score); } fclose(f); } void out(age dnu[],int n){ printf("s s s s","Ma nganh","Ten nganh","So sinh vien ","Diem trung tuyenn"); for(int i=0;ilt;n;i ){ printf("s s d d",dnu[i].id,dnu[i].name,dnu[i].numb,dnu[i].score); printf("n"); } } int main(){ age *dnu; int n; printf("Nhap so nganh hoc can quan ly : "); scanf("%d",amp;n); dnu = (age*)malloc(n*sizeof(age)); for(int i=0;ilt;n;i ){ fflush(stdin); printf("Nhap ma nganh hoc : "); fgets(dnu[i].id,sizeof(dnu[i].id),stdin); delete_n(dnu[i].id); fflush(stdin); printf("Nhap ten nganh hoc : "); fgets(dnu[i].name,sizeof(dnu[i].name),stdin); delete_n(dnu[i].name); fflush(stdin); printf("Nhap so sinh vien : "); scanf("%d",amp;dnu[i].numb); printf("Nhap diem trung tuyen : "); scanf("%d",amp;dnu[i].score); } sx(dnu,n); out(dnu,n); file(dnu,n); free(dnu); }
Затем вторую программу , я хочу, чтобы выходные данные студента , но петля лишь выполнить 1 раз, затем ошибка я думаю , мои ошибки fscanf(f,"%d",....)
, я думаю, что функции fscanf не является хорошим выбором , еще раз извините за незнания языка , вы не должны обращать внимание ни на что другое , я просто думаю, что ошибка находится в разделе «файл»
#include"stdio.h" #include"stdlib.h" #include"string.h" struct age{ char id[10]; char name[50]; int numb; int score; }; int main(){ age dnu[20]; char x[50]; int d; int n; FILE *f; f = fopen("ex3","r"); if(f==NULL){ printf("Error"); exit(0); } // if( fgets(x,60,f)!=NULL){ // puts(x); // } fscanf(f,"%d",amp;n); for(int i=0;ilt;1;i ){ fscanf(f," %s ",amp;dnu[i].id); fscanf(f," %s ",amp;dnu[i].name); fscanf(f,"%d",amp;dnu[i].numb); fscanf(f,"%d",amp;dnu[i].score); } printf("s s s s","Ma nganh","Ten nganh","So sinh vien ","Diem trung tuyenn"); for(int i=0;ilt;n;i ){ printf("s s d d",dnu[i].id,dnu[i].name,dnu[i].numb,dnu[i].score); printf("n"); } fclose(f); }
вы можете увидеть изображения, введите описание изображения здесь
Комментарии:
1. Извините, но опубликованный код не компилируется как C — там нет типа
age
. Я замечаю на снимке экрана, что вы используете.cpp
файлы.2. я хочу, чтобы программа 2 получала данные из программы 1
3. на скриншоте показаны данные , которые я ввел из программы 1, и данные, которые выводит программа 2 . В середине находится текстовый файл
4. вы можете видеть программу 2 ,в первый раз цикла for программа 2 выполняется верно, затем она завершается ошибкой
5. Вы смешиваете использование
fgets(..., stdin)
сscanf()
волей, как правило, приводит к проблемам, которые вы, похоже, используетеfflush(stdin)
, чтобы обойти. Но поведение не определено. Получите все входныеfgets()
данные иsscanf()
при необходимости примените их к входной строке. Удалите всеfflush(stdin)
. Переименуйте файлы .cpp в .c. Замените каждое использованиеage
наstruct age
.