Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2009, 21:03   #11
_Dis_
 
Аватар для _Dis_
 
Регистрация: 27.08.2009
Сообщений: 8
По умолчанию

Ещё одна вещь: взаимодействие scanf() и gets(). Дело в том, что после вызова scanf() идёт пропуск вызова gets().

Код:
/*-------Структура-----*/
struct STUDENT
{       
 char *name;  
 char *group; 
 int *mark;  
} man;
/*---------Собственно функция---------/*	
void add()
{
 system("cls");
 long size;
 if((r = fopen("studfile.txt","a"))==NULL){printf("\nCan't open file...");return;}
  size=filelength(fileno(r));
  if (size!=0) fputs("\n",r);
  char str1[100], str2[100];
  printf("\nEnter student's name:");
  gets(str1);//по второму вызову функции add эта gets пропускается и программ сразу перезодит на gets(str2);
  man.name=(char*)(calloc(strlen(str1),sizeof(char)));
  strcat(man.name, str1);  
 printf("\nEnter number of group:"); 
 gets(str2); 
  man.group=(char*)(calloc(strlen(str2),sizeof(char)));
  strcat(man.group, str2); 
  int j=0; int ammark = 0;
  printf("\nEnter amount of marks: ");
  scanf("%d", &ammark);
  if(ammark>10){printf("max mark = 10\n"); ammark=10;}
  man.mark =(int *)calloc( ammark, (sizeof(int)));
  for (j=0; j<ammark; j++){
  printf("\nEnter %d mark: ",j+1);    
  scanf("%d%", &man.mark[j]);//тот самый злосчастный scanf
  if(man.mark[j]>5){man.mark[j]=5;}}  
  for(j=0;j<ammark; j++)
  printf("%d ",man.mark[j]); 
  fprintf(r,"%s|",man.name);
  fprintf(r,"%s|",man.group);
  for(j=0;j<ammark; j++)
  fprintf(r,"%d|",man.mark[j]);
  fclose(r);
  printf("The record was successfully added...");
  free(man.name);
  free(man.group);
  free(man.mark);
  main();
  return;
}
подскажите пожалуйста, как взаимодействуют эти функции, и как решить проблему.
system("PAUSE"); /*GOT MILK?*/
_Dis_ вне форума Ответить с цитированием
Старый 28.08.2009, 21:29   #12
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

что значит %d% в scanf ? Целое число это просто %d
XeN0N вне форума Ответить с цитированием
Старый 28.08.2009, 21:33   #13
_Dis_
 
Аватар для _Dis_
 
Регистрация: 27.08.2009
Сообщений: 8
По умолчанию

ой я..) описки находишь)
там пробовала ("%d%*c") понятия не имею ЧТО это, но на другом форуме нашла подобную тему и там посоветовали сделать так.
но тогда оно требует ещё чего-то, вместо одного целого числа, например ещё одно.

Вопрос решила постановкой getchar(); после последнего scanf().
Может кому-то поможет в будущем.
system("PAUSE"); /*GOT MILK?*/

Последний раз редактировалось Stilet; 31.08.2009 в 10:28.
_Dis_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при удалении символа Virus191288 Общие вопросы Delphi 13 15.08.2009 14:50
в последней строчке ошибка! почему?? (Pascal) -=t-r-a-s-h=- Помощь студентам 6 02.06.2009 17:11
Определение номера последней строки выделенного диапазона НеВа6464 Microsoft Office Excel 2 17.05.2009 14:36
Ошибка при удалении... JRcoker Общие вопросы Delphi 8 29.07.2008 22:53
Проблемы при удалении файлов Pavel55 Общие вопросы Delphi 7 10.01.2008 00:45