Измените эту часть кода, пожалуйста.
О ваших массивах, которые ожидают сохранения строки - не так липринять во внимание строку NULL терминатора, которая также нуждается в ячейке массива для хранения?
В любом случае, я вижу, gender
имеет размер 2, но ваш ввод предполагает, что ему нужно больше.
Ваш ввод имеет 7 токенов:
1 dior Asfiya 20 abcde 12345
, что означает, что gender
переполнит , вызывая Undefined Behavior (UB) , так как вы попытаетесь сохранить строку длиной 4 символав массив размера 2. Это может объяснить сбой.
Вы бы увидели его при проверке 7 значений, но в вашем коде есть и другая проблема, о которой вы можете прочитать в следующем разделе.
Вы, вероятно, имели в виду:
1 dior Asfiya 20 abcde f 12345
Изменить это:
while(c = fscanf(q,"%d %s %s %d %s %s %llu%[^\n]",&add.acc_no,add.password,add.name,&add.age,add.gender,add.address,&add.phone) == 7)
к этому:
while((c = fscanf(q,"%d %s %s %d %s %s %llu%[^\n]",&add.acc_no,add.password,add.name,&add.age,add.gender,add.address,&add.phone)) == 7)
, поскольку из-за приоритета операторов сравнение происходит за до назначения, что не то, что вам нужно.Сначала вы хотите присвоить свою переменную, а затем сравнить, поэтому используйте скобки, чтобы указать желаемый приоритет.