В чем ошибка? - C (СИ) (78436)

Узнай цену своей работы

Формулировка задачи:

После поиска if (mas.ysp[v]>=4) Выдает полный бред...
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct stud
{ char fio[20];
  int  n_gr;
  int ysp[5];
}; 
int main() {
          FILE *file;
          int size=sizeof(stud),i=0,n,v=0;
          stud mas;
          if ((file=fopen("I:\main_file.","wb+"))==NULL) 
          { printf(" Nevozmozhno otkrit nyzniyfile ",stderr);
          getch();
          exit(1); }
//        clrscr();
printf("\t\t\t\ Wvod dannix o studentax\n");
 
while (i<2)
               { printf("Wvedite dannie o  - %i -om studente\n",i+1);
                 printf("\nWvedite F.I.O :");
                 scanf("%s",&mas.fio);
                 printf("\nWvedite nomer grupi :");
                 scanf("%i",&mas.n_gr);
                 printf("\nWvedite 5 ocenok :");
                 for(v=0;v<5;v++){
                 scanf("%i",&mas.ysp[v]);}
                 fwrite(&mas,size,1,file);
                 i++;}
  printf("\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍ»\n");
  printf("\tВє          F.I.O     Вє  1Вє  2Вє  3Вє  4Вє  5Вє  N grupi Вє\n");
  printf("\tГЊГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЋГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЋГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌВ№\n");
  rewind(file);
  while (!feof(file))
  {
   fread(&mas,size,1,file);
   if (feof(file)) break;
printf("\tВє%20sВє",mas.fio);  
 for(v=0;v<5;v++)
printf("%3iВє",mas.ysp[v]);
printf("%10iВє\n",mas.n_gr);             
  }
  printf("\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍͼ\n");
printf("\n\n");
printf("\n");
  printf("\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
  printf("\tВє 1Вє  2Вє  3Вє  4Вє  5Вє        F.I.O         Вє     N grupi Вє\n");
  printf("\tГЊГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЋГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЋГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌГЌВ№\n");
  i=0;
    rewind(file);
    while (!feof(file))
    {
     fread(&mas,size,1,file);
     if (feof(file)) break;
     for(v=0;v<5;v++)
     if (mas.ysp[v]>=4)
     for (v=0;v<5;v++)
{printf("%3iВє",mas.ysp[v]);
n++;}
printf("%20sВє%10iВє\n",mas.fio,mas.n_gr);
          }       
          printf("\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍͼ\n");
          
    if(n==0){ printf("\tВє     Net takix studentov!      Вє\n");
   }

getch();
return 0;
}

Решение задачи: «В чем ошибка?»

textual
Листинг программы
     for(v=0;v<5;v++)
     if (mas.ysp[v]>=4)
     for (v=0;v<5;v++)
{printf("%3iє",mas.ysp[v]);
n++;}

Объяснение кода листинга программы

В представленном коде есть два вложенных цикла for. Первый цикл проходит по элементам массива mas.ysp, второй цикл также проходит по элементам массива mas.ysp. Внутри второго цикла есть команда printf, которая выводит на экран значение элемента массива с индексом v. Значение выводится в формате %3iє, где %3i означает, что число должно быть выведено в формате бело-синий текст (на белом фоне синим шрифтом), а є это символ, который добавляется после числа. Команда n++ используется для увеличения значения переменной n на единицу после каждого вывода числа. Это позволяет подсчитать, сколько чисел было выведено на экран. Ошибка в коде заключается в том, что при выходе из первого цикла, значение переменной v остается неизменным, и поэтому во втором цикле всегда выводятся числа с одинаковыми индексами.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5