Я должен сделать программу, которая получает на вход a и b, получает на вход число "a" строк следующего вида: "studentId studentName studentPhone" и b строк ввода в виде "stId mark1 mark2 mark3". Затем программа выводит все stid из первого ввода, и если такой же идентификатор существует во вводе b, программа выводит оценки учащихся помимо своего идентификатора.
Я прошел через ад, чтобы получить правильный ввод, и я думаю, что это близко, но я получаю странное поведение: после того, как я ввожу оценки во второй ввод, кажется, что некоторые идентификаторы учащихся в первом вводе изменились.
Это мой код: (здесь я пытаюсь ввести только идентификаторы учащихся. http://ideone.com/dBYzwe )
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
void chomp(char *s);
struct listA{
int stId;
char stName[19];
char stPhone[12];
};
struct listB{
int stId;
char marks[11];
};
int main(void) {
int i, j, m, n;
scanf("%d%d", &m, &n);
struct listA *a = malloc(sizeof(m * sizeof(struct listA)));
struct listB *b = malloc(sizeof(n * sizeof(struct listB)));
for(i = 0; i < m; i++)
{
scanf("%d", &a[i].stId);
fgets(a[i].stName, 19, stdin);
fgets(a[i].stPhone, 11, stdin);
chomp(a[i].stName);
chomp(a[i].stPhone);
}
for(i = 0; i < m; i++)
printf("%d ", a[i].stId);
for(i = 0; i < n; i++)
{
scanf("%d ", &b[i].stId);
fgets(b[i].marks, 12, stdin);
fflush(stdin);
}
printf("\n");
for(i = 0; i < n; i++)
{
printf("%d ", b[i].stId);
}
printf("\n");
for(i = 0; i < m; i++)
printf("%d ", a[i].stId);
return 0;
}
void chomp(char *s) {
while(*s && *s != '\n' && *s != '\r') s++;
*s = 0;
}
a
не является массивом, тогда почему вы используетеa[i]
? - person Shubham   schedule 11.11.2013fflush(stdin);
(кроме MS DOS) приведет к неопределенному поведению. - person haccks   schedule 11.11.2013The stream for the fflush function points to an input stream or to an update stream in which the most recent operation was input (7.21.5.2).
- person haccks   schedule 12.11.2013