Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Почемучка)
1243 / 303 / 30
Регистрация: 23.12.2010
Сообщений: 2,000
Записей в блоге: 1
1

Ошибки при считывании строки из файлы

11.05.2011, 22:01. Просмотров 618. Ответов 2
Метки нет (Все метки)

Добрый вечер.
Бьюсь с этой проблемой уже не первый день. Но вразумительно ответа в интернете так и не нашел.
В программе нужно считать данные из файла(имя товара, имя марки, и цену) и занести все это в динамическую структуру, где все элементы упорядочены по имени товара.
вот сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// hh.cpp : main project file.
 
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <locale>
#include <conio.h>
#include <limits>
using namespace std;
 
struct node
{
    string name;
    string firma;
    int price;
    node *next;
};
void addnode(node **first, node *con)
{
    node *tmp;
    tmp=new node;
    tmp->price=con->price;
    tmp->name=con->name;
    tmp->firma=con->firma;
    tmp->next=(*first);
    (*first)=tmp;
}
void print(node *first)
{
    node *tmp=first;
    while(tmp!=NULL){
        cout << tmp->name << " ";
        tmp = tmp->next;
    }
}
node* find(node *first, node *con)
{
    node *tmp=first;
    
    while((tmp!=NULL) && (strcmp(&tmp->name,&con->name)<0))
        tmp=tmp->next;
 
        return tmp;
    
}
void insert(node **first, node *con)
{
    node *tmp;
    tmp=find(*first,con);
        if(tmp==NULL)
            addnode(first,con);
        else
        {
            node *tmp1;
            tmp1=new node;
            tmp1->price=con->price;
            tmp1->name=con->name;
            tmp1->firma=con->firma;
            tmp1->next=tmp->next;
            tmp->next=tmp1;
        }
}
void vvod(istream &c, node **first,int n){
    
    
    c>>n;
    c.ignore(100,'\n'); 
 
    for(int i=0; i<n; i++){
        node *tmp;
        tmp=new node;
        tmp->next=NULL;
        char ch;
        while((ch=c.get())!='"');
        c.getline(tmp->name,100,'"');
        c.get();
        while((ch=c.get())!='"');
        c.getline(tmp->firma,100,'"');
        c>>tmp->price;
        insert(first,tmp);
        
        
    }
}
 
int main(){
    node *first = NULL;
    int N=5;
    
                        // указатель на строку
                 // количество искомых последовательностей
    
    ifstream in; 
    in.open("text.txt",ios::in);
    if(in)
        vvod(in,&first, N); 
    else cout<<"Файл не найден";
    print(first);
    
}
основные проблемы в 77 и 80 строке, т.е где c.getline(tmp->firma,100,'"');. В следствии этого выдает ошибку:
C++
1
2
3
4
5
6
7
error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize,_Elem)' : cannot convert parameter 1 from 'std::string' to 'char *'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2011, 22:01
Ответы с готовыми решениями:

Ошибки при считывании цифр
Здравствуйте. Когда я ввожу в диологовое окно цифры и нажимаю Enter, то возникают вот такие...

Ошибки при считывании с хостинга ftp
Лог ошибки: 03-26 11:36:25.148 13800-13800/spsoft.passwordgenerator E/AndroidRuntime: FATAL...

Разъясните ошибки при считывании файла
не пойму что от меня требуется тут) пол года изучаем язык) часть ошибок исправил но при считывании...

Неизвестная причина ошибки при считывании клавиши
Доброго всем, пишу игру, в которой есть управление персонажем с помощью клавиш...

2
Эксперт С++
516 / 420 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
11.05.2011, 22:13 2
Вместо
c.getline(tmp->name,100,'"');
нужно
C++
1
getline(c, tmp->name, '"');
Не работает, потому что метод getline работает с char*, а не со string
0
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
11.05.2011, 22:17 3
istream::getline, как вам говорит компилятор, работает только с char * буферами, тут вам возможно пришлось бы взять адрес первого элемента строки std::string и дальше записывать туда с помощью istream::getline, но это чревато разными последствиями. Вместо этого стоит использовать отдельную функцию std::getline, которая объявлена в заголовке string и работает, как ей и полагается с типом std::string, что вам и надо. Небольшая справочка : http://www.cplusplus.com/reference/string/getline/
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2011, 22:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Зацикливает, при считывании строки
Даже не запрашивает ввод, сразу зацикливает. Что не так? case 3: { char* r =...

Перенос строки при считывании из файла
Глупый конечно вопрос, но почему не происходит перенос строки? ...

Переполнение строки при считывании из файла
Считываю я строки из файла, в котором их 500 тысяч. Если строка начинается на R, то я записываю её...

Ошибка при считывании строки из файла
При попытке прочитать строку выдает ошибку: Warning: fgets() expects parameter 1 to be resource,...

Непонятная работа при считывании строки
Доброго дня всем. Возникла проблема в следующем коде: import java.io.*; //import...

Как пропустить строки при считывании?
Как считать данные, пропустив первые 5 строк? образец файла: LECROYHDO4034A 50284 Waveform...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.