0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 46
1

Работа с файлами и списками. Не может нормально считать с консоли строку, считывает либо первое слово либо вообще ничего

11.01.2020, 19:39. Показов 1441. Ответов 10
Метки нет (Все метки)

Столкнулся с проблемой в строке 20. Сейчас компилятор тупо пропускает эту строку, если считывать через scanf_s то считывает только первое слово. Например если ввести название уч зав school 140 то считает только school, а 140 поднесёт под "фамилию ученика"
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
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "RU");
    struct ych {
        char naz[20], fam[20];
        int och;
    };
    ofstream fout("lab9.txt");
    int n;
    cout << "введите количество участников " << endl;
    cin >> n;
    ych* spisok = new ych[n];
    for (int i = 0; i < n; i++) {
        cout << "введите название учебного учереждения   ";
        cin.getline(spisok[i].naz, strlen(spisok[i].naz));
        fout << "название учебного заведения:  " << spisok[i].naz << "\n";
        cout << "введите фамилию ученика   ";
        cin >> spisok[i].fam; cin.clear();
        fout << "фамилия ученика:  " << spisok[i].fam << "\n";
        cout << "введите количество набраных очков   ";
        cin >> spisok[i].och; cin.clear();
        fout << "количество набраных очков:  " << spisok[i].och << "\n";
    }
    fout.close();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2020, 19:39
Ответы с готовыми решениями:

Загружается либо один файл, либо не загружается вообще ничего
Ребят, вот такая штука, не могу разобраться почему не работает, файлы выберает, пишет &quot;выбрано...

Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1, либо a2, ., либо ak
Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1,...

Чат - при переписке один человек либо не получает сообщения либо связь вообще не устанавливается
Меня попросили написать чат что бы 2 человека могли общаться между собой через интернет. Написал....

Задача: Считать из файла 10 строк и вывести их либо в Label, либо в Memo
Полнуй нубяра пересел на Lazarus и ищет помощь! Преамбула: Темным предновогодним вечером некий...

10
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
11.01.2020, 19:58 2
а чё так страшно? У нас есть std::string
1
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 46
11.01.2020, 20:10  [ТС] 3
не очень понял на самом деле
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
11.01.2020, 20:14 4
Цитата Сообщение от mascrpone Посмотреть сообщение
char naz[20]
вы тут пытались имитировать строку, это можно спокойно заменить на std::string, а считывает криво из за мусора в cin, я cin не часто пользуюсь(только на этом форуме) и не знаю его специфик
если будете использовать std::string замените
C++
1
        cin.getline(spisok[i].naz, strlen(spisok[i].naz));
на это
C++
1
        std::getline(std::cin, spisok[i].naz);
по логике если так считывать каждый элемент, а не вот так
C++
1
cin >> spisok[i].fam;
то таких проблем быть не должно
1
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 46
11.01.2020, 20:23  [ТС] 5
ну на самом деле это всё равно вот так вот выглядит, просто пропускает, не понимаю почему
Работа с файлами и списками. Не может нормально считать с консоли строку, считывает либо первое слово либо вообще ничего
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
11.01.2020, 20:31 6
Я имел ввиду заменить всё на getline
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
#include <fstream>
#include <string>
#include <iostream>
 
using namespace std;
 
struct ych {
    std::string naz, fam, och;
};
 
int main()
{
    setlocale(LC_ALL, "RU");
    
    ofstream fout("lab9.txt");
    int n;
    cout << "введите количество участников " << endl;
    cin >> n;
    cin.clear();
    cin.get();
    ych* spisok = new ych[n];
    for (int i = 0; i < n; i++) {
        cout << "введите название учебного учереждения   ";
        std::getline(std::cin, spisok[i].naz);
        fout << "название учебного заведения:  " << spisok[i].naz << "\n";
        cout << "введите фамилию ученика   ";
        std::getline(std::cin, spisok[i].fam);
        fout << "фамилия ученика:  " << spisok[i].fam << "\n";
        cout << "введите количество набраных очков   ";
        std::getline(std::cin, spisok[i].och);
        fout << "количество набраных очков:  " << spisok[i].och << "\n";
    }
    fout.close();
}
1
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
11.01.2020, 20:42 7
Лучший ответ Сообщение было отмечено mascrpone как решение

Решение

Цитата Сообщение от AndryS1 Посмотреть сообщение
string naz, fam, och;
если все string то в структуре и смысла нет
Цитата Сообщение от mascrpone Посмотреть сообщение
просто пропускает, не понимаю почему
после ввода числа в потоке остаётся '\n'. добавьте строку cin.ignore(); перед строкой, которая пропускается, например
C++
1
2
3
cin.ignore();
cout << "введите название учебного учереждения   ";
getline(cin, spisok[i].naz);
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
11.01.2020, 20:44 8
Yetty, а какой будет аналог структуре в данном случае?
1
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
11.01.2020, 20:51 9
AndryS1, не совсем понял, что Вы спрашиваете. можно оставить примерно как у ТС в последнем коде
C++
1
2
3
4
5
struct ych {
    string naz;
    string fam;
    int och;
    };
но лучше конечно транслит не использовать

или Вы про вектор строк ?
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
11.01.2020, 20:55 10
Цитата Сообщение от Yetty Посмотреть сообщение
если все string то в структуре и смысла нет
Ну просто чтобы логически в коде делить можно было, разве можно обойтись без структуры/класса?
(без костылей по типу #define NAZ 1... spisok[NAZ * i] ...)
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
11.01.2020, 21:05 11
Цитата Сообщение от AndryS1 Посмотреть сообщение
логически в коде делить
создайте новую тему с задачей, без условия что можно делить ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2020, 21:05
Помогаю со студенческими работами здесь

При включении USB-устройства либо вообще не подают признаков жизни, либо "не принимают команды"
При включении ПК и загрузке Windows, устройства, подключенные по USB либо вообще не подают...

Программа либо зацикливается (выводя правильный ответ), либо не успешно, в чем может быть проблема?
Вообщем начали изучать пролог, но не получается решить задачу. Так вот задача звучит следующим...

Либо удваивая одиночные, либо заменяя сдвоенные одним символом, привести строку к заданному виду
Помогите решить эту задачу, я написал решение, но оно получилось огромным (73 строчки), непонятным...

При изменении каких либо данных программа либо вылетает, либо просто не изменяет данные
Добрый вечер. Только недавно начал заниматься С++. И вот возникли проблемы. При изменении каких...

Ввести с клави атуры знак арифметической операции(либо+,либо-,либо/)и два числа
Ввести с клавиатуры знак арифметической операции(либо+,либо-,либо/)и два числа.Вывести на экран...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru