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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 15:42   #1
oper_89
Новичок
Джуниор
 
Регистрация: 23.05.2013
Сообщений: 3
По умолчанию просьба помочь в устранении ошибки

программа подгружает файл в котором несколько сотен строк с дробными числами,затем сравнивает попарно 2 и 1, 3 и 2 и т.д. значения строк. если 2 больше 1,то 1й счетчик "а" увеличивается на 1.при достижении а=2, значение 2 счетчика "b" увеличивается на 1,а значение "а" обнуляется.

при запуске ошибки конвертации string в double:

111/main.cpp|24|ошибка: cannot convert «std::string {aka std::basic_string<char>}» to «const char*» for argument «1» to «double atof(const char*)»|
111/main.cpp|28|ошибка: cannot convert «std::string {aka std::basic_string<char>}» to «const char*» for argument «1» to «double atof(const char*)»|


#include <string>
#include <fstream>
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
string line; //Текущая строка из файла
int nLines = 1;//Думаю ясно что эта переменная будет хранить
ifstream ifs("input.txt");
if(!ifs.is_open()) {
cout<<"Ошибка открытия файла input.txt\n";
return 0;
}
cout << "Число строк : "<<nLines<<endl;
cout<<"Для продолжения работы программы нажмите любую клавишу...";
cin.get();
int i = 0;
int a = 0;
int b = 0;
double x1, x2;
getline(ifs, line);
x1 = atof (line);
while(getline(ifs,line))
{
nLines++;
x2 = atof(line);
if(x2 > x1){
a++;
} if(a==2){
b++;a = 0;
cout<<"Точка пика : "<<i<<endl;
}
x1 = x2;
}
ifs.close();
cout << "Число строк : "<<nLines<<endl;
cout << "Всего пиков: "<<b<<endl;
return 0;
}
oper_89 вне форума Ответить с цитированием
Старый 23.05.2013, 16:07   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

1) Аргумент какого типа ожидает функция atof()?
2) А Вы что ей даёте?
3) У класса std::string есть метод c_str(), можно использовать его.
Abstraction вне форума Ответить с цитированием
Старый 23.05.2013, 16:20   #3
oper_89
Новичок
Джуниор
 
Регистрация: 23.05.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
1) Аргумент какого типа ожидает функция atof()?
2) А Вы что ей даёте?
3) У класса std::string есть метод c_str(), можно использовать его.
а можете поподробнее объяснить как должно быть правильно?
oper_89 вне форума Ответить с цитированием
Старый 23.05.2013, 19:42   #4
oper_89
Новичок
Джуниор
 
Регистрация: 23.05.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
1) Аргумент какого типа ожидает функция atof()?
2) А Вы что ей даёте?
3) У класса std::string есть метод c_str(), можно использовать его.
попробовал через c_str(). тоже не вышло.что не так?


main (1).cpp||In function 'int main()':|
main (1).cpp|24|error: cannot convert 'const char*' to 'double' in assignment|
main (1).cpp|28|error: cannot convert 'const char*' to 'double' in assignment|


Код:

#include <string>
#include <fstream>
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    string line;
    int nLines = 1;/
    ifstream ifs("input.txt");
    if(!ifs.is_open()) {
        cout<<"Ошибка открытия файла input.txt\n";
        return 0;
    }
    cout << "Число строк : "<<nLines<<endl;
    cout<<"Для продолжения работы программы нажмите любую клавишу...";
    cin.get();
    int i = 0;
    int a = 0;
    int b = 0;
    double x1, x2;
    getline(ifs, line);
    x1 = (line.c_str());
    while(getline(ifs,line))
    {
       nLines++;
       x2 = (line.c_str());
       if(x2 > x1){
            a++;
       } if(a=2){
                b++;a = 0;
              cout<<"Точка пика : "<<i<<endl;
        }
        x1 = x2;
    }
    ifs.close();
    cout << "Число строк : "<<nLines<<endl;
    cout << "Всего пиков: "<<b<<endl;
    return 0;
}
oper_89 вне форума Ответить с цитированием
Старый 23.05.2013, 20:07   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
попробовал через c_str(). тоже не вышло.что не так?
Поработаю переводчиком:
Цитата:
main (1).cpp|24|error: cannot convert 'const char*' to 'double' in assignment|
Цитата:
Программист, трать-тарарать, что ты творишь?! У меня переменная типа double, как я туда const char* запихну?
Вы описание метода c_str() прочитали, прежде чем его использовать?
Метод c_str() возвращает C-строку, соответствующую содержанию std::string.
Функция atof() принимает C-строку и возвращает значение типа float.
Abstraction вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопросик и просьба помочь Юлясонце Софт 1 25.09.2012 08:58
Просьба помочь с задачкой:) ssnnqq Паскаль, Turbo Pascal, PascalABC.NET 2 31.03.2012 21:29
Просьба помочь! С++/С# Lihoj Фриланс 0 08.12.2011 02:49
Просьба помочь Ditmar Microsoft Office Word 1 28.04.2010 13:11
Просьба помочь с задачей. kry Паскаль, Turbo Pascal, PascalABC.NET 9 11.01.2009 13:53