В чем ошибка? - C (СИ) (78436)
Формулировка задачи:
#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; }
Решение задачи: «В чем ошибка?»
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 остается неизменным, и поэтому во втором цикле всегда выводятся числа с одинаковыми индексами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д