Форум программистов, компьютерный форум CyberForum.ru

С++ по Krupniku. Problema с задачей. Может дело в getline() ? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Составить программу 2 способами : switch, if. http://www.cyberforum.ru/cpp-beginners/thread643701.html
Помогите, имеется вот такая задача. Составить программу 2 способами : switch, if. Придумать и задать входные данные что бы было 4-7 альтернатив. Есть данные про 6 товаров. Ввести числовой код одного из них. И получить справку про цену и число товара.
C++ Не получается отсортировать рабочий график Нужно чтобы программа могла читать рабочии графики контор 2х видов: Стандартный E 10-19, T 10-19, K 10-19, N 10-19, R 10-19, L 10-17 Укороченный E-R 10-19, L 10-17 В добавок дни, когда контора закрыта, должны быть тоже помечены. У меня не получается скомпилировать программу. Пишет, что я сравниваю подписанные и неподписанные интеджеры. Я не очень понимаю в чем дело, нужна помощь. Вот... http://www.cyberforum.ru/cpp-beginners/thread643697.html
Язык программирования С++ C++
Доброго времени суток, Уважаемые Форумчане! Я учусь в БГУИР на инженер-программиста (Минск). И возник вопрос - Хочу стать экспертом в области С++. Расскажите с чего начать и впоследствие улучшить свои навыки по с++, начиная свой путь от новичка до профессионала. Также интересует С++ для 3d игр. Вопрос больше программерам. Спасибо!
C++ очередь с приоритетом, извлечение минимума
сабж http://www.cplusplus.com/reference/stl/priority_queue по умолчанию там есть только метод извлечения максимума в сети нашел такой способ - #include <iostream> #include <queue> #include <vector> int main() {
C++ Выделение памяти под массив http://www.cyberforum.ru/cpp-beginners/thread643677.html
Требуется выделить память под матрицу. Будет ли следующий код работать корректно? //глобальная область int x_size = 3; int y_size = 4; int *p;
C++ Проверить, являются ли числа в массиве возрастающими? Всем доброго времени суток, долго боролся над данной проблемой, изменял код по всячески, пробовал разные проверки на возрастание, все впустую. Программа по первому условию судит все массивы - если сначала проверять на невозрастание, то все введенные массивы она признает такими, и наоборот. Прилагаю код и очень надеюсь на вашу помощь. Желательно указать на ошибку, а не переписывать с нуля.... подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2012, 11:49     С++ по Krupniku. Problema с задачей. Может дело в getline() ?
Во первых, сделайте проверку открытия файла:
C++
1
2
3
4
5
6
7
ifstream infile(b); //Открываем книгу
if (!infile.is_open())
{ 
    cout << "Error!" << endl;
    system("pause");
    return 1;
}
cin >> правильно считает название книги, если оно состоит из одного слова (читает до пробела). Чтобы правильно читалось название книги, состоящее из нескольких слов, можно сделать так:
C++
1
2
3
string b;
cout << "Enter book title: ";
getline(cin, b);
Добавлено через 28 минут
Если вам нужно считать из книги отдельные слова, а не строки, то используйте getline() с третьим параметром ' ':
C++
1
infile.getline(mass, sizeof(mass), ' ');
Будет читать sizeof(mass) - 1 символ из книги пока не встретит пробел или конец файла. По умолчанию читает до '\n' или конца файла. Или используйте оператор >> :
C++
1
infile >> mass;
Добавлено через 10 минут
Вот в таком виде, код вполне рабочий:
Код
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
#include <fstream>
#include <map>
#include <Windows.h>
#include <cctype> // для ispunct()
using namespace std;
 
int main() 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    map <string, string> d;   //Контейнер для слов
    map <string, string>::iterator im;
    //char  mass[80];
    string mass; 
    string b;
    cout << "Enter book title: ";
    getline(cin, b);
    
    ifstream infile(b); //Открываем книгу
    if (!infile.is_open())
    { 
        cout << "Error!" << endl;
        system("pause");
        return 1;
    }
    
    string::iterator it;// для удаления знаков пунктуации в начале и конце слова
    while(true)
    {
        infile >> mass; // читаем слово в mass.
        if(infile.eof()) break;
 
        it = mass.begin(); // указывает на первый символ слова.
        while (!mass.empty() && ispunct((unsigned char)(*it))) // удаляем знаки пунктуации в начале слова.
        {
            mass.erase(it);
            it = mass.begin();
        }   
        if (mass.empty()) continue;
        
        it = --mass.end(); 
        while (ispunct((unsigned char)(*it))) // удаляем знаки пунктуации в конце слова.
        {
            mass.pop_back(); 
            it = --mass.end();
        }                 
          
          d.insert(pair <string, string> (mass, " K"));  // Вставка слова в контейнер, и пометка слов буквой "К"
     } //while
        
        for(im = d.begin(); im != d.end(); im++)   // Вывод слов на экран.
           cout << im ->first << im ->second << endl;
    
system("pause");
return 0;   
}
 
Текущее время: 11:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru