Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2013, 20:47   #1
FauLL
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 15
По умолчанию Работа с файлами (C)

Дан файл f, содержащий сведения о веществах: указывается название вещества, его удельный вес и проводимость (проводника, полупроводник, изолятор). Найти удельные веса и названия всех полупроводников.

Код:
#include <iostream>
#include <cstdlib>
#include <string>
#include <windows.h>
 
 
using namespace std;
 
struct sub 
{
     char name[15];
     double ves;
     char provod[15];
};
 
int WriteFile(FILE *f, int n)
{
    sub arr;
    f = fopen("file.dat", "wb");
    if (f == NULL)
    {
        printf("Error");
        exit(0);
    }
    cout<<"Введете количество записей:"<<endl;
    cin>>n;
        cout<<"Введите название эелемента, удельный вес и тип проводимости"<<endl;
    for(int i = 0; i < 3; i++)
    {
             cin >> arr.name >> arr.ves >> arr.provod;
        fwrite(&arr, sizeof(sub), 1 , f);
            cout << endl;
    }
    fclose(f);
    return 0;
}
 
void ReadFile(FILE *f, int n, char *pr)
{
    sub arr;
    f = fopen("file.dat", "rb");
    if (f == NULL)
    {
        printf("Error");
        exit(0);
    }
    printf("\n");
    printf("          Output file:\n");
    printf("-----------------------\n");
    for(int i = 0; i < n; i++)
    {
        fread(&arr, sizeof(sub), 1 , f);
        cout << "\nПолупроводники:" << endl;
         if(strcmp(arr.provod, pr) == 0)
     cout << arr.name << ' ' << arr.ves << endl;
    }
    fclose(f);
}
 
int main()
{
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     int y,z,n;
     sub arr[3];
     char* pr = "полупроводник";
    z = WriteFile(f1,n);
    ReadFile(f1, n, pr);
     system("pause");
     return 0;
}
выдает ошибку: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.


f1: необъявленный идентификатор
FauLL вне форума Ответить с цитированием
Старый 12.12.2013, 21:27   #2
_BYTE
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 56
По умолчанию

"This function or variable may be unsafe." это насколько я понимаю не ошибка а только Warning, то бишь не парься, а "f1: необъявленный идентификатор" ну правильно ты в мейне вызываешь функцию с необъявленной переменной f1 че тут непонятного объяви его, или лучше убери этот параметр из обоих функций и объяви внутри них переменную типа FILE ибо ты все равно инициализируешь ее fopen внутри функций
_BYTE вне форума Ответить с цитированием
Старый 12.12.2013, 21:41   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
лучше убери этот параметр из обоих функций и объяви внутри них переменную типа FILE ибо ты все равно инициализируешь ее fopen внутри функций
Поддерживаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2013, 21:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
лучше убери этот параметр из обоих функций и объяви внутри них переменную типа FILE ибо ты все равно инициализируешь ее fopen внутри функций
Поддерживаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.12.2013, 00:21   #5
FauLL
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 15
По умолчанию

сделал программу, но
1-не знаю как перегрузить функцию ввода в текстовом файле без r
2-при работе с текстовым файлов, не правильно выводиться tmp.ves
читал что нужно преобразовать символьную строку в число с помощью atof, но незнаю как

Код:
#include <iostream>
#include <cstdlib>
#include <string>
#include <windows.h>
#include <stdlib.h>
 
 
using namespace std;
 
struct sub 
{
     char name[15];
     double ves;
     char provod[15];
};
 
int WriteFile(FILE *f)
{
    sub arr;
    int n;
    if (f == NULL)
    {
        printf("Error");
        exit(0);
    }
 
    cout<<"Введете количество записей:"<<endl;
    cin>>n;
        cout<<"Введите название эелемента, удельный вес и тип проводимости"<<endl;
    for(int i = 0; i < n; i++)
    {
             cin >> arr.name >> arr.ves >> arr.provod;
        fwrite(&arr, sizeof(sub), 1 , f);
            cout << endl;
    }
    fclose(f);
    return n;
}
 
void ReadFile(FILE *f, int z, char *pr)
{
    sub arr;
    f = fopen("file.dat", "rb");
    if (f == NULL)
    {
        printf("Error");
        exit(0);
    }
    printf("\n");
    printf("Output file:\n");
    cout << "\nПолупроводники:" << endl;
    for(int i = 0; i < z; i++)
    {
        fread(&arr, sizeof(sub), 1 , f);
         if(strcmp(arr.provod, pr) == 0)
     cout << arr.name << ' ' << arr.ves << endl;
    }
    fclose(f);
}
 
//текстовый файл
int WriteFile(FILE *f1, float r)
{
 
    char name[15];
    char ves[15];
    char provod[15];
    int n;
    if (f1 == NULL)
    {
        printf("Error");
        exit(0);
    }
 
    cout<<"Введете количество записей:"<<endl;
    cin>>n;
        cout<<"Введите название эелемента, удельный вес и тип проводимости"<<endl;
    for(int i = 0; i < n; i++)
    {
             cin >> name;
        fputs(name , f1);
        fprintf(f1,"\n");
        cin >> ves ;
        fputs(ves , f1);
        fprintf(f1,"\n");
        cin >>provod;
        fputs(provod , f1);
        fprintf(f1,"\n");
            cout << endl;
    }
    fclose(f1);
    return n;
}
 
void ReadFile(FILE *f1,double m, char *pr)
{
    
    //string name;
    //string ves;
    //string provod;
    sub tmp;
    f1 = fopen("file.txt", "r");
    if (f1 == NULL)
    {
        printf("Error");
        exit(0);
    }
    printf("\n");
    printf("Output file:\n");
    cout << "\nПолупроводники:" << endl;
    for(int i = 0; i < m; i++)
    {
        //fgets(name, , f1);fgets(ves ,, f1);
        fscanf(f1,"%s", &tmp.name);
        fscanf(f1,"%d", &tmp.ves);
        fscanf(f1,"%s", &tmp.provod);
        //cout<<tmp.provod;
        //memset(provod,0,15);
        //cout<<provod;
        //fgets(provod , , f1);
        //cout<<provod;
         if(strcmp(tmp.provod, pr) == 0){
             //cout<<provod;
    
     cout<<tmp.name<<" "; 
     
     cout<< tmp.ves << endl;}cout<<endl;
    }
    fclose(f1);
}
 
int main()
{
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     FILE *f;
      FILE *f1;
     int z,x;
     float r;
     double m;
     char* pr = "полупроводник";
     cout<<"Выберите тип файла:"<<endl;
     cout<<"1-текстовый"<<endl;
     cout<<"2-типизированный"<<endl;
     cin>>x;
     cout<<"левое число"<<endl;
     cin>>r;
     switch(x)
     {case 2:
         f = fopen("file.dat", "wb");
    z = WriteFile(f);
    ReadFile(f, z, pr );
    break;
     case 1:
          f1 = fopen("file.txt", "w");
 m= WriteFile(f1, r);
    ReadFile(f1, m, pr);
     }
     system("pause");
     return 0;
}
Код:
#pragma once
 
int WriteFile( FILE *f);
void ReadFile( FILE *f, int z,  char* pr);
int WriteFile( FILE *f1, r);
void ReadFile( FILE *f1, double m,  char* pr);
FauLL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами (С++) Gaara2046 Помощь студентам 8 15.11.2012 21:03
Работа с файлами. iCaesy Паскаль, Turbo Pascal, PascalABC.NET 1 21.10.2011 17:31
Работа с файлами stas135642 Общие вопросы C/C++ 0 14.02.2011 22:17