Я написал простой код с использованием структурного метода, и в этом коде я беру строку (имя) в качестве ввода, используя цикл для трех студентов. Для 1-й итерации каждая строка в цикле работает так, как должна быть .... но проблема возникает на второй итерации ... на второй итерации scanf
пропускает ввод для строки (имя) ...Функция scanf пропускает входной сигнал для цикла в C Программирование
Мой код такой же, как и ниже:
#include<stdio.h>
struct student_data
{
char name[5];
int dsd;
int dic;
int total;
};
void main()
{
struct student_data s[3];
int i;
for(i = 0;i<3;i++)
{
printf("Enter Name of Student\n");
scanf("%[^\n]",s[i].name); // Problem occures here in
// second iteration
printf("\nEnter marks of DSD\n");
scanf("%d",&s[i].dsd);
printf("Enter marks of DIC\n");
scanf("%d",&s[i].dic);
s[i].total = s[i].dsd+s[i].dic;
}
printf("%-10s %7s %7s %7s\n ","Name","DSD","DIC","Total");
for(i=0;i<3;i++)
{
printf("%-10s %5d %6d %6d\n",s[i].name,s[i].dsd,s[i].dic,s[i].total);
}
}
Вы все равно используете 'scanf()'. Вы ДОЛЖНЫ проверять возвращаемое значение, если вы не хотите читать неинициализированную память. И вы этого не хотите, потому что это неопределенное поведение. Проблема с 'scanf()' заключается в том, что очень сложно сделать ее полезной в реальной программе, поэтому она редко используется, тем не менее, это первое, что каждый узнает о [tag: c]. Пожалуйста, прочитайте документацию 'scanf()', вы можете сами выяснить, почему она не работает, и почему это не так. –
Неверный 'scanf()'. используйте 'scanf ("% 4 [^ \ n] ", s [i] .name); вместо этого. –
@AbhishekTandon, если мы используем 'scanf ("% 4 [^ \ n] ", s [i] .name);'. Можем ли мы дать имя более 4 символов? –