Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
1

Необъяснимо, но факт

17.05.2018, 17:45. Показов 1371. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Учусь сейчас С++, пишу в CodeBlocks. Позавчера любая написанная программа (более сложная, чем cout << "Hello World!") выводила очень странные результаты. И вот сегодня, столкнувшись с десятой неверно работающей программой, я что-то заподозрил. Пошел в онлайн-комплилятор, и он выдал верный ответ.

Переустанавливал CodeBlocks, все перепроверил, вроде всё должно быть верно. Но работает неправильно. Что такое, помогите, мне к ЕГЭ надо готовиться
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2018, 17:45
Ответы с готовыми решениями:

Определить факт пересечения объектов и факт включения одного объекта в другой
Создается много плоских фигур(прямо, квадраты и другие) вершины задаются координатами. Помогите...

Необъяснимо, но факт. HP Pavilion DV 6
Доброго времени суток всем. Вобщем есть у меня ноутбук HP Pavilion DV 6, проц АМД А6 3420м, видео...

Аномалия с микрофоном, необъяснимо но факт
Короче расскажу историю. Есть у меня комп. раньше стояла система ХР. И Были простые наушники,...

Приложение необъяснимо зависает...
Привет, друзья форумчане. Помогите пожалуйста. Суть такая. Я методом...

24
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.05.2018, 17:50 2
Цитата Сообщение от ferr3t Посмотреть сообщение
помогите
Не видя кода?

Добавлено через 53 секунды
Цитата Сообщение от ferr3t Посмотреть сообщение
пишу в CodeBlocks
Компилятор там какой подключен (название, версия)?
0
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 17:51  [ТС] 3
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int m, N, k;
    string fullName;
 
    cin >> N;
 
    string one[N], two[N], three[N];
    for (int i = 0; i < N; i++)
    {
        one[i] = ' ';
        two[i] = ' ';
        three[i] = ' ';
    }
    for (int i = 0; i < N; i++)
    {
        cin >> fullName;
        for (int j = 0; j < 3; j++)
        {
            cin >> m;
            if (m == 2) k++;
        }
        if (k == 3) three[i] = fullName;
        if (k == 2) two[i] = fullName;
        if (k == 1) one[i] = fullName;
    }
    for (int i = 0; i < N; i++)
    {
        cout << three[i] << endl;
    }
    for (int i = 0; i < N; i++)
    {
        cout << two[i] << endl;
    }
    for (int i = 0; i < N; i++)
    {
        cout << one[i] << endl;
    }
    return 0;
}
Вот код. Условия задачи: На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> - строка, состоящая не более чем из 20 символов, <Имя> — строка, состоящая не более чем из 15 символов, <оценки> - через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:

Иванов Петр 4 2 4



Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран фамилии и имена неуспевающих учеников (имеющих по результатам экзаменов хотя бы одну двойку), располагая их в порядке уменьшения числа двоек.

Добавлено через 50 секунд
nd2, GNU GCC Compiler
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.05.2018, 17:56 4
Цитата Сообщение от ferr3t Посмотреть сообщение
C++
1
2
3
one[i] = ' '; 
two[i] = ' '; 
three[i] = ' ';
Это для чего сделано?
Цитата Сообщение от ferr3t Посмотреть сообщение
GNU GCC Compiler
У тебя Linux?
0
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 17:57  [ТС] 5
nd2, винда. Это для того, чтобы он корректно выводил заполненные строки. Я, если честно, не уверен, что оно так должно быть сделано.

Он ведь там не каждый элемент массива заполнит фамилией, а только те, в которых двоечники. А остальные элементы останутся неопределёнными. Вот я их и "опустошаю"
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.05.2018, 18:01 6
Цитата Сообщение от ferr3t Посмотреть сообщение
cin >> fullName;
И что ты здесь вводишь? Вот это?
Цитата Сообщение от ferr3t Посмотреть сообщение
Иванов Петр
0
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 18:02  [ТС] 7
nd2, да

Добавлено через 51 секунду
nd2, ну хотя нет, подожди. Я понимаю, он через пробел будет следующую переменную уже считывать. Я пробовал вводить просто букву А, он все равно не работает
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.05.2018, 18:02 8
Цитата Сообщение от ferr3t Посмотреть сообщение
Вот я их и "опустошаю"
std::string по умолчанию пустыми создаются, поэтому не нужно их "опутсошать", тем более, через присваивание пробела.
0
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 18:06  [ТС] 9
nd2, окей, убрал это. В любом случае, он мне выводит пустые строки в CodeBlocks, а в онлайн-компиляторе (https://www.onlinegdb.com/online_c++_compiler) выводит верный ответ

Добавлено через 2 минуты
nd2, к слову, убрал это "опустошение" и запустил проект в онлайне - ничего мне не вывел
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.05.2018, 18:13 10
Лучший ответ Сообщение было отмечено ferr3t как решение

Решение

Цитата Сообщение от ferr3t Посмотреть сообщение
В любом случае, он мне выводит пустые строки в CodeBlocks
Скрин работы покажи, чтоб твой ввод был виден.

Добавлено через 2 минуты
Цитата Сообщение от ferr3t Посмотреть сообщение
C++
1
k++
У тебя где k инициализируется?
1
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 18:13  [ТС] 11
nd2,
Миниатюры
Необъяснимо, но факт  
0
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 18:14  [ТС] 12
nd2, шок. k не инициализировался. Сделал ему k = 0 и прога сработала. Даже как-то стыдно
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
17.05.2018, 18:18 13
Цитата Сообщение от ferr3t Посмотреть сообщение
C++
1
2
cin >> N;
string one[N], two[N], three[N];
Undefined behavior...
Да нормальный компилятор такое даже пропустить не должен!
0
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 18:18  [ТС] 14
Operok, почему?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.05.2018, 18:22 15
Цитата Сообщение от Operok Посмотреть сообщение
Да нормальный компилятор такое даже пропустить не должен!
Это нестандартное расширение GCC.
0
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 18:23  [ТС] 16
nd2, и слава богу
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.05.2018, 18:23 17
Цитата Сообщение от ferr3t Посмотреть сообщение
Сделал ему k = 0 и прога сработала.
Смотря где сделал. В конце каждой итерации внешнего цикла k нужно обнулять.
0
0 / 0 / 0
Регистрация: 18.04.2018
Сообщений: 20
17.05.2018, 18:27  [ТС] 18
nd2, да-да, так и сделал, спасибо)

Добавлено через 2 минуты
nd2, только вот у меня вопрос. Он теперь после каждой выведенной как бы пропускает строку из-за << endl. Это необходимо, но как сделать так, чтобы он после элементов с пустым значением не пропускал?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
17.05.2018, 18:29 19
Цитата Сообщение от ferr3t Посмотреть сообщение
и слава богу
Но расширение нестандартное, поэтому такой код считается непереносимым.
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
17.05.2018, 18:29 20
ferr3t, потому что конструкция вида:
C++
1
SomeType var[size];
это объявление "статического" массива, размер которого известен при компиляции, а вы определяете размер в рантайме (вводя его в консоль) и что будет находиться в переменных one, two, three я представления не имею. Запомните, размер любой переменной на этапе компиляции должен быть известен.

C++
1
2
3
4
5
6
7
size_t N = 0;
cin >> N;
string* one = new string[N];
 
// поработали
 
delete[] one;
а лчше так
C++
1
2
3
size_t N = 0;
cin >> N;
std::vector<string> one(N);
1
17.05.2018, 18:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2018, 18:29
Помогаю со студенческими работами здесь

Ребус: "Факт + Факт = Наука"
Ребят помогите плз, нужно заменить букви цифрами так, что б уравнение ФАКТ+ФАКТ=НАУКА стала верной....

Удивительно но факт
Был сайт около 300 бэков через всем известную прогу и 1 сп, потом про него как то забыли, и он с ВЧ...

Интересный факт.
Всем привет. Сегодня столкнулся с интересной штукой. Я оптимизировал сайт (страницу...

Не объяснимо но факт )
В жизни не видел такого =-O если вкратце то у меня ноутбук lenovo z570 купил год назад там был...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru