Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка компиляции в Visual Studio (C).

41K
20 января 2009 года
ill2005
12 / / 20.01.2009
Помогите решить задачу на c.
Дан файл координат точек на плоскости найти прямоугольную оболочку(координаты верхнего левого и нижнего правого углов) включающую в себя все эти точки. Реализовать на двоичных файлах с использованием структур.
И ещё вопрос
Код:
//программа переписывает из одного файла в другой строки,
//содержащие цифры

#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 выдаёт ошибку при компиляции?
38K
20 января 2009 года
joeed
25 / / 23.12.2008
Я запустил, у меня выдает всего лишь warning (предупреждение), а не ошибку
41K
20 января 2009 года
ill2005
12 / / 20.01.2009
joeed
При запуске через ctrl+f5 выдаёт debug assertion failed
307
20 января 2009 года
Artem_3A
863 / / 11.04.2008
Цитата: ill2005
joeed
При запуске через ctrl+f5 выдаёт debug assertion failed



Все работает, во всяком случае в MVSC++ 2005. Попробуй перебилдеть проект.

320
21 января 2009 года
m_Valery
1.0K / / 08.01.2007
Цитата: ill2005

...
Почему visual studio выдаёт ошибку при компиляции?


Кто ж знает? Да, какую ОШИБКУ? Что пишет то? Кто ж тебе поможет, если ты даже проблему не описываешь?

41K
22 января 2009 года
ill2005
12 / / 20.01.2009
Сделал програмку из первого поста, но она выдаёт не те числа. Помогите найти ошибку.
Код:
//программа находит прямоугольную рамку в которую входят заданые точки

#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();
}
38K
23 января 2009 года
joeed
25 / / 23.12.2008
1. Координаты объявлены целыми (%d), а команды формата, передаваемые функции scanf определяют десятичные числа с плавающей запятой (%f)
Код:
...
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 );
41K
23 января 2009 года
ill2005
12 / / 20.01.2009
joeed
Всё равно выдаёт нули.
38K
23 января 2009 года
joeed
25 / / 23.12.2008
Код:
//программа находит прямоугольную рамку в которую входят заданые точки

#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
41K
24 января 2009 года
ill2005
12 / / 20.01.2009
joeed
А если тип x,y- float
38K
24 января 2009 года
joeed
25 / / 23.12.2008
Код:
//программа находит прямоугольную рамку в которую входят заданые точки

#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
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог