//программа переписывает из одного файла в другой строки,
//содержащие цифры
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <locale.h>
#include <conio.h>
int main (){
setlocale( LC_ALL, "Russian" );
FILE* file; //указатель на исходный файл
FILE* file2; //указатель на конечный файл
char str[100000]; //строковая переменная для хранения строк из файла
file=fopen("f.txt","r"); //открываем первый файл на чтение
if( file == NULL ) {
printf( "Не могу открыть 'f.txt' на чтение. Нажмите клавишу...\n" );
_getch();
return -1;
}
file2=fopen("g.txt","w"); //открываем второй файл на запись
if( file2 == NULL ) {
printf( "Не могу открыть 'g.txt' на чтение. Нажмите клавишу...\n" );
_getch();
return -1;
}
while(!feof(file)) //цикл обхода файла
{
fgets(str,100000,file); //считываем строку из файла
for(int i=0;i<strlen(str);i++) //цикл перебора символов в строке
{
if(isdigit(str)) //если символ цифра
{
fputs(str,file2); //записать строку во второй файл
break; //выйди из цикла перебора
}
}
}
fclose(file); //закрыть файл
fclose(file2); //закрыть файл
return 0;
}
Ошибка компиляции в Visual Studio (C).
Дан файл координат точек на плоскости найти прямоугольную оболочку(координаты верхнего левого и нижнего правого углов) включающую в себя все эти точки. Реализовать на двоичных файлах с использованием структур.
И ещё вопрос
Код:
Почему visual studio выдаёт ошибку при компиляции?
Я запустил, у меня выдает всего лишь warning (предупреждение), а не ошибку
При запуске через ctrl+f5 выдаёт debug assertion failed
Цитата: ill2005
joeed
При запуске через ctrl+f5 выдаёт debug assertion failed
При запуске через ctrl+f5 выдаёт debug assertion failed
Все работает, во всяком случае в MVSC++ 2005. Попробуй перебилдеть проект.
Цитата: ill2005
...
Почему visual studio выдаёт ошибку при компиляции?
Кто ж знает? Да, какую ОШИБКУ? Что пишет то? Кто ж тебе поможет, если ты даже проблему не описываешь?
Код:
//программа находит прямоугольную рамку в которую входят заданые точки
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
struct coord{
int z;
int x;
int y;
};
int main(){
setlocale( LC_ALL, "Russian" );
// открытие файла на запись
FILE *f;
f = fopen( "koordinaty.dat", "wb+" );
if( f == NULL ) {
printf( "Не удалось создать или перезаписать 'koordinaty.dat'. Нажмите клавишу...\n" );
_getch();
return -1;
}
coord k;
k.z=0;
int c=0;
// работа с файлом
printf( "Создаётся файл координат.\n\n" );
while( true ) {
printf( "введите 0 для выхода или 1 для продолжения: " );
scanf( "%d", &k.z );
if( k.z==0 ) break;
printf( "x= " );
scanf( "%f", &k.x);
fflush(stdin);
printf( "y= " );
scanf( "%f", &k.y );
fflush(stdin);
fwrite( &k, sizeof(k), 1, f );
printf( "Информация добавлена.\n\n" );
c++;
}
// закрытие файла
fclose(f);
printf( "\nФайл координат создан\n" );
f = fopen( "koordinaty.dat", "rb" );
if( f == NULL ) {
printf( "Не могу открыть файл координат на чтение. Нажмите клавишу...\n" );
_getch();
return -1;
}
int ox [50];
int oy [50];
int i=0;
int xmin,ymin,xmax,ymax;
for (int h=0;h<50;h++){
ox[h]=0;
oy[h]=0;
}
// работа с файлом
printf( "Просматривается файл координат: \n\n" );
while( true ) {
int n = fread( &k, sizeof(k), c, f );
if( n>= c ) break;
if (i==c) break;
ox=k.x;
oy=k.y;
i++;
}
fclose(f);
xmin=xmax=ox[0];
ymin=ymax=oy[0];
for(int i1=1;i1<i;i1++)
{
if(ox[i1]<xmin) xmin=ox[i1];
if(ox[i1]>xmax) xmax=ox[i1];
if(oy[i1]<ymin) ymin=oy[i1];
if(oy[i1]>ymax) ymax=oy[i1];
}
printf ("Left x,y =%t,%t",xmin,ymin);
printf ("Right x,y =%t,%t",xmax,ymax);
_getch();
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
struct coord{
int z;
int x;
int y;
};
int main(){
setlocale( LC_ALL, "Russian" );
// открытие файла на запись
FILE *f;
f = fopen( "koordinaty.dat", "wb+" );
if( f == NULL ) {
printf( "Не удалось создать или перезаписать 'koordinaty.dat'. Нажмите клавишу...\n" );
_getch();
return -1;
}
coord k;
k.z=0;
int c=0;
// работа с файлом
printf( "Создаётся файл координат.\n\n" );
while( true ) {
printf( "введите 0 для выхода или 1 для продолжения: " );
scanf( "%d", &k.z );
if( k.z==0 ) break;
printf( "x= " );
scanf( "%f", &k.x);
fflush(stdin);
printf( "y= " );
scanf( "%f", &k.y );
fflush(stdin);
fwrite( &k, sizeof(k), 1, f );
printf( "Информация добавлена.\n\n" );
c++;
}
// закрытие файла
fclose(f);
printf( "\nФайл координат создан\n" );
f = fopen( "koordinaty.dat", "rb" );
if( f == NULL ) {
printf( "Не могу открыть файл координат на чтение. Нажмите клавишу...\n" );
_getch();
return -1;
}
int ox [50];
int oy [50];
int i=0;
int xmin,ymin,xmax,ymax;
for (int h=0;h<50;h++){
ox[h]=0;
oy[h]=0;
}
// работа с файлом
printf( "Просматривается файл координат: \n\n" );
while( true ) {
int n = fread( &k, sizeof(k), c, f );
if( n>= c ) break;
if (i==c) break;
ox=k.x;
oy=k.y;
i++;
}
fclose(f);
xmin=xmax=ox[0];
ymin=ymax=oy[0];
for(int i1=1;i1<i;i1++)
{
if(ox[i1]<xmin) xmin=ox[i1];
if(ox[i1]>xmax) xmax=ox[i1];
if(oy[i1]<ymin) ymin=oy[i1];
if(oy[i1]>ymax) ymax=oy[i1];
}
printf ("Left x,y =%t,%t",xmin,ymin);
printf ("Right x,y =%t,%t",xmax,ymax);
_getch();
}
Код:
...
struct coord{
int z;
int x;
int y;
};
...
coord k;
...
scanf( "%f", &k.x);
...
scanf( "%f", &k.y );
...
struct coord{
int z;
int x;
int y;
};
...
coord k;
...
scanf( "%f", &k.x);
...
scanf( "%f", &k.y );
...
2. В цикле не надо читать сразу все точки, а по одной это нужно делать:
Код:
int n = fread( &k, sizeof(k), 1, f );
Всё равно выдаёт нули.
Код:
//программа находит прямоугольную рамку в которую входят заданые точки
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
struct coord{
int z;
int x;
int y;
};
int main(){
setlocale( LC_ALL, "Russian" );
// открытие файла на запись
FILE *f;
f = fopen( "koordinaty.dat", "wb+" );
if( f == NULL ) {
printf( "Не удалось создать или перезаписать 'koordinaty.dat'. Нажмите клавишу...\n" );
_getch();
return -1;
}
coord k;
k.z=0;
int c=0;
// работа с файлом
printf( "Создаётся файл координат.\n\n" );
while( true ) {
printf( "введите 0 для выхода или 1 для продолжения: " );
scanf( "%d", &k.z );
if( k.z==0 ) break;
printf( "x= " );
scanf( "%d", &k.x);
// fflush(stdin);
printf( "y= " );
scanf( "%d", &k.y );
// fflush(stdin);
fwrite( &k, sizeof(k), 1, f );
printf( "Информация добавлена.\n\n" );
c++;
}
// закрытие файла
fclose(f);
printf( "\nФайл координат создан\n" );
f = fopen( "koordinaty.dat", "rb" );
if( f == NULL ) {
printf( "Не могу открыть файл координат на чтение. Нажмите клавишу...\n" );
_getch();
return -1;
}
int ox [50];
int oy [50];
int i=0;
int xmin,ymin,xmax,ymax;
for (int h=0;h<50;h++){
ox[h]=0;
oy[h]=0;
}
// работа с файлом
printf( "Просматривается файл координат: \n\n" );
while( true ) {
int n = fread( &k, sizeof(k), 1, f );
if( n>= c ) break;
if (i==c) break;
ox=k.x;
oy=k.y;
i++;
}
fclose(f);
xmin=xmax=ox[0];
ymin=ymax=oy[0];
for(int i1=1;i1<i;i1++)
{
if(ox[i1]<xmin) xmin=ox[i1];
if(ox[i1]>xmax) xmax=ox[i1];
if(oy[i1]<ymin) ymin=oy[i1];
if(oy[i1]>ymax) ymax=oy[i1];
}
printf ("Left x,y =%d,%d",xmin,ymin);
printf ("Right x,y =%d,%d",xmax,ymax);
_getch();
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
struct coord{
int z;
int x;
int y;
};
int main(){
setlocale( LC_ALL, "Russian" );
// открытие файла на запись
FILE *f;
f = fopen( "koordinaty.dat", "wb+" );
if( f == NULL ) {
printf( "Не удалось создать или перезаписать 'koordinaty.dat'. Нажмите клавишу...\n" );
_getch();
return -1;
}
coord k;
k.z=0;
int c=0;
// работа с файлом
printf( "Создаётся файл координат.\n\n" );
while( true ) {
printf( "введите 0 для выхода или 1 для продолжения: " );
scanf( "%d", &k.z );
if( k.z==0 ) break;
printf( "x= " );
scanf( "%d", &k.x);
// fflush(stdin);
printf( "y= " );
scanf( "%d", &k.y );
// fflush(stdin);
fwrite( &k, sizeof(k), 1, f );
printf( "Информация добавлена.\n\n" );
c++;
}
// закрытие файла
fclose(f);
printf( "\nФайл координат создан\n" );
f = fopen( "koordinaty.dat", "rb" );
if( f == NULL ) {
printf( "Не могу открыть файл координат на чтение. Нажмите клавишу...\n" );
_getch();
return -1;
}
int ox [50];
int oy [50];
int i=0;
int xmin,ymin,xmax,ymax;
for (int h=0;h<50;h++){
ox[h]=0;
oy[h]=0;
}
// работа с файлом
printf( "Просматривается файл координат: \n\n" );
while( true ) {
int n = fread( &k, sizeof(k), 1, f );
if( n>= c ) break;
if (i==c) break;
ox=k.x;
oy=k.y;
i++;
}
fclose(f);
xmin=xmax=ox[0];
ymin=ymax=oy[0];
for(int i1=1;i1<i;i1++)
{
if(ox[i1]<xmin) xmin=ox[i1];
if(ox[i1]>xmax) xmax=ox[i1];
if(oy[i1]<ymin) ymin=oy[i1];
if(oy[i1]>ymax) ymax=oy[i1];
}
printf ("Left x,y =%d,%d",xmin,ymin);
printf ("Right x,y =%d,%d",xmax,ymax);
_getch();
}
Проверял ввод: 1 0 1 1 1 0
Вывод: 0 0 1 1
А если тип x,y- float
Код:
//программа находит прямоугольную рамку в которую входят заданые точки
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
struct coord{
int z;
float x;
float y;
};
int main(){
setlocale( LC_ALL, "Russian" );
// открытие файла на запись
FILE *f;
f = fopen( "koordinaty.dat", "wb+" );
if( f == NULL ) {
printf( "Не удалось создать или перезаписать 'koordinaty.dat'. Нажмите клавишу...\n" );
_getch();
return -1;
}
coord k;
k.z=0;
int c=0;
// работа с файлом
printf( "Создаётся файл координат.\n\n" );
while( true ) {
printf( "введите 0 для выхода или 1 для продолжения: " );
scanf( "%d", &k.z );
if( k.z==0 ) break;
printf( "x= " );
scanf( "%f", &k.x);
// fflush(stdin);
printf( "y= " );
scanf( "%f", &k.y );
// fflush(stdin);
fwrite( &k, sizeof(k), 1, f );
printf( "Информация добавлена.\n\n" );
c++;
}
// закрытие файла
fclose(f);
printf( "\nФайл координат создан\n" );
f = fopen( "koordinaty.dat", "rb" );
if( f == NULL ) {
printf( "Не могу открыть файл координат на чтение. Нажмите клавишу...\n" );
_getch();
return -1;
}
float ox [50];
float oy [50];
int i=0;
float xmin,ymin,xmax,ymax;
for (int h=0;h<50;h++){
ox[h]=0;
oy[h]=0;
}
// работа с файлом
printf( "Просматривается файл координат: \n\n" );
while( true ) {
int n = fread( &k, sizeof(k), 1, f );
if( n>= c ) break;
if (i==c) break;
ox=k.x;
oy=k.y;
i++;
}
fclose(f);
xmin=xmax=ox[0];
ymin=ymax=oy[0];
for(int i1=1;i1<i;i1++)
{
if(ox[i1]<xmin) xmin=ox[i1];
if(ox[i1]>xmax) xmax=ox[i1];
if(oy[i1]<ymin) ymin=oy[i1];
if(oy[i1]>ymax) ymax=oy[i1];
}
printf ("Left x,y =%d,%d",xmin,ymin);
printf ("Right x,y =%d,%d",xmax,ymax);
_getch();
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
struct coord{
int z;
float x;
float y;
};
int main(){
setlocale( LC_ALL, "Russian" );
// открытие файла на запись
FILE *f;
f = fopen( "koordinaty.dat", "wb+" );
if( f == NULL ) {
printf( "Не удалось создать или перезаписать 'koordinaty.dat'. Нажмите клавишу...\n" );
_getch();
return -1;
}
coord k;
k.z=0;
int c=0;
// работа с файлом
printf( "Создаётся файл координат.\n\n" );
while( true ) {
printf( "введите 0 для выхода или 1 для продолжения: " );
scanf( "%d", &k.z );
if( k.z==0 ) break;
printf( "x= " );
scanf( "%f", &k.x);
// fflush(stdin);
printf( "y= " );
scanf( "%f", &k.y );
// fflush(stdin);
fwrite( &k, sizeof(k), 1, f );
printf( "Информация добавлена.\n\n" );
c++;
}
// закрытие файла
fclose(f);
printf( "\nФайл координат создан\n" );
f = fopen( "koordinaty.dat", "rb" );
if( f == NULL ) {
printf( "Не могу открыть файл координат на чтение. Нажмите клавишу...\n" );
_getch();
return -1;
}
float ox [50];
float oy [50];
int i=0;
float xmin,ymin,xmax,ymax;
for (int h=0;h<50;h++){
ox[h]=0;
oy[h]=0;
}
// работа с файлом
printf( "Просматривается файл координат: \n\n" );
while( true ) {
int n = fread( &k, sizeof(k), 1, f );
if( n>= c ) break;
if (i==c) break;
ox=k.x;
oy=k.y;
i++;
}
fclose(f);
xmin=xmax=ox[0];
ymin=ymax=oy[0];
for(int i1=1;i1<i;i1++)
{
if(ox[i1]<xmin) xmin=ox[i1];
if(ox[i1]>xmax) xmax=ox[i1];
if(oy[i1]<ymin) ymin=oy[i1];
if(oy[i1]>ymax) ymax=oy[i1];
}
printf ("Left x,y =%d,%d",xmin,ymin);
printf ("Right x,y =%d,%d",xmax,ymax);
_getch();
}
Контрольный пример. Не проверял, но, я думаю, работать будет так:
Для продолжения ввожу 1, потом ввожу х =1, y=0, для продолжения еще раз 1, ввожу х=0, y=1, для завершения ввода ввожу 0, вывод Left x,y=0,0 Right x,y = 1,1