Другие языки программирования и технологии

И снова Си...помогите

#include<stdio.h>#include<conio.h>#include <iostream.h>FILE *f;int a,j,b,A[4][5];char name[20];int main(){ printf(" Vvedite ima faila: "); scanf("%s",&name); if (!(f=fopen(name,"wt"))) {printf("ошибка\n"); getch(); } printf("Vvedite 20 celix 4isel 4erez ENTER\n"); for(int i=0;i<20;i++) {scanf("%d",&a); fprintf(f,"]",a); } fclose(f); if (!(f=fopen(name,"at"))) {printf("ошибка\n"); getch(); } printf("Vvedite wtkjt 4islo\n"); scanf("%d",&b); fprintf(f,"\n%d",b); fclose(f); cout<<"massiv A[4][5]\n"; f=fopen(name,"r"); int C; while(!feof(f)){ for (int p=0;p<5;++p) { for (int j=0;j<4;++j) fscanf(f,"%d",&A[p][j]);} fscanf(f,"%d",&C);} fclose(f); for (int p=0;p<5;++p){ for (int j=0;j<4;++j) printf("=",A[p][j]); cout<<"\n";} cout<<"\n"<<c;>C) k++; int B[20]; int l=0; for (int p=0;p<5;++p) for (int j=0;j<4;++j) if (A[p][j]>C && l<=k){ B[l]=A[p][j]; l++;} for (int i=0;i<k;++i)>); if (!(f=fopen(name,"wt"))) //здесь файл не открывается...почему???? {printf("oschibka otkritij faila\n"); getch(); } fputs("resultat\n",f); fprintf(f,"Sformirovanniy massiv A[5][4]\n"); for (int p=0;p<5;++p){ for (int j=0;j<4;++j) fprintf(f,"]",A[p][j]); fprintf(f,"\n");} fputs("4islo b ",f); fprintf(f,"%d",b); fprintf(f,"Massiv B\n"); for (int i=0;i<k;++i)>); fclose(f); getch();}
printf(" Vvedite ima faila: ");
scanf("%s",&name);
Это код содержит уязвимость переполнения буфера

getch(); - это малопереносимая функция, лучше ей не пользоваться вообще. Тем более, что в данном случае она не нужна

printf("Vvedite 20 celix 4isel 4erez ENTER\n"); // Аффтар знатный албанец
for(int i=0;i<20;i++)
{scanf("%d",&a);
fprintf(f,"]",a);
}
Если вы думаете, что этот код делает что-то полезное, то вы ошибаетесь

if (!(f=fopen(name,"at")))
{printf("ошибка\n");
getch();
}
printf("Vvedite wtkjt 4islo\n");
scanf("%d",&b);
fprintf(f,"\n%d",b);
fclose(f);
Этот код кроме албанского содержит еще логическую ошибку - если файл не будет открыт, то все равно будет попытка считать оттуда данные.

cout<<"massiv A[4][5]\n";
Не следует мешать ввод-вывод из С и С++ -возможны глюки

f=fopen(name,"r");
int C; // а что, в начале вашей чудо-программы поставить это было несудьба?
Вообще забили на проверку открылся файл или нет.

while(!feof(f)) // А вот это - очень правильный подход. Луч света в темном царстве

if (!(f=fopen(name,"wt"))) //здесь файл не открывается... почему??? ?
{printf("oschibka otkritij faila\n");
getch(); }
По идее файл должен открываться. И если бы вы обрабатывали ошибки - узнали бы почему он не открывается.
вот так надо открывать файлы
FILE* fp = NULL;

fp = fopen( filename, "w" );
if( fp )
{
// Файл успешно открыт - работаем дальше
fclose( fp );
}
else
{
// Обработка ошибок
perror( "fopen" );
}
Герман Булыгин
Герман Булыгин
9 623
Лучший ответ
И на кой тут мне этот код нужен?
Роман Ульянец
Роман Ульянец
14 913
name заполнить нулями бы перед инициализацией и проверить после нее, что имя файла терминируется нулевым символом
... Mahoff
... Mahoff
13 017
Посмотри в отладчике, может ты где=то name затираешь
Олег Мизюн
Олег Мизюн
1 138