Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Аноним
5 / 5 / 4
Регистрация: 15.12.2013
Сообщений: 149
1

Лишние символы на выводе

08.04.2015, 20:35. Показов 3107. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: в строке заменить плюсы на минусы.
Вроде всё выполняется нормально, но за результатом выводятся не нужные мне символы
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
const int n = 32;
int _tmain(int argc, _TCHAR* argv[])
{
    char str[n];
    cout << "Enter str["<<n<<"]: ";
    gets_s(str, n);
    for (int i = 0; i < n; i++)
    {
        if (str[i] == '+')
            str[i] = '-';
    }
    cout << "\n Result: ";
    int g = 0;
    for (int i = 0; i < n; i++)
    {
        cout << str[i];
        if (str[i] == '\n')
            break;
 
    }
    _getch();
    return 0;
}
Миниатюры
Лишние символы на выводе  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2015, 20:35
Ответы с готовыми решениями:

Добавляются лишние символы при выводе
Программа просто должна из строки букв и цифр (или только цифр) вывести цифры в верном порядке....

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

При выводе на экран появляются лишние символы
#include &lt;iostream&gt; // ??? printf #include &lt;string.h&gt; // ??? strtok bool IsPalindrom (char...

Добавляются лишние символы при выводе данных в поток
Есть char buff; куда пишутся данные с сети. вывожу на печать: cout &lt;&lt;&quot;IMEI- &quot; &lt;&lt; &quot;--&quot; &lt;&lt;...

12
162 / 158 / 62
Регистрация: 28.09.2013
Сообщений: 293
08.04.2015, 21:14 2
Лучший ответ Сообщение было отмечено Di3go как решение

Решение

C++
1
2
3
4
5
6
7
8
9
cout << "\n Result: ";
    int g = 0;
    for (int i = 0; i < n; i++)
    {
        cout << str[i];
        if (str[i] == '\n')
            break;
 
    }
Зачем выводить в цикле каждый символ: cout << "\n Result: " << str;
И ещё. При считывании строки укажите на 1 символ меньше, ибо не хватает для признака окончания строки '\0'
И ещё после объявлении массива можно использовать memeset, чтобы обнулить возможный "мусор"
1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.04.2015, 21:16 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
const int n = 32;
int main()
{
    char str[n];
    cout << "Enter str["<<n<<"]: ";
    
    gets(str);
    
    for (int i = 0; i < n; i++)
        if (str[i] == '+')
            str[i] = '-';
 
    cout << "\n Result: " << str<<'\n';
}
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
08.04.2015, 21:17 4
Цитата Сообщение от Yanush Посмотреть сообщение
И ещё после объявлении массива можно использовать memeset, чтобы обнулить возможный "мусор"
C++
1
char str[n] = {0}; // инициализация массива нулями
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
08.04.2015, 21:24 5
C++
1
2
3
4
5
6
7
8
/*for (int i = 0; i < n; i++)
    {
        cout << str[i];
        if (str[i] == '\n')
            break;
 
    }*/
    cout << str << endl;
Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
 
    gets_s(str, n);
    for (int i = 0; str[i] != '\0'; i++)
    {
        if (str[i] == '+')
            str[i] = '-';
    }
0
162 / 158 / 62
Регистрация: 28.09.2013
Сообщений: 293
08.04.2015, 21:25 6
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
1
char str[n] = {0}; // инициализация массива нулями
Знаю... хотя, наверное, это вы не мне писали.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
08.04.2015, 22:25 7
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
char str[n] = {0}; // инициализация массива нулями
Не нужно там никаких обнулений, gets_s() добавляет терминальный ноль. Просто это нужно учитывать при обработке массива, и при выводе (если не использовать функции вывода, которые и так это учитывают).

Добавлено через 48 минут
Цитата Сообщение от hoggy Посмотреть сообщение
for (int i = 0; i < n; i++)
* * * * if (str[i] == '+')
* * * * * * str[i] = '-';
hoggy, я удивлён.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.04.2015, 22:29 8
Цитата Сообщение от lss Посмотреть сообщение
я удивлён.
???
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
08.04.2015, 22:33 9
Цитата Сообщение от hoggy Посмотреть сообщение
???
Перебирать весь массив после gets()?
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
08.04.2015, 22:58 10
Цитата Сообщение от lss Посмотреть сообщение
Не нужно там никаких обнулений, gets_s() добавляет терминальный ноль.
я это писал исключительно относительно функции memset.
Цитата Сообщение от lss Посмотреть сообщение
Перебирать весь массив после gets()?
а есть иные способы замены символов?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.04.2015, 22:59 11
Цитата Сообщение от lss Посмотреть сообщение
Перебирать весь массив после gets()?
ко мне начало приходить понимание,
что код "для чтения" не должен быть ни эффективным, ни красивым.
он должен быть понятным своему читателю.

в данном случае - соответствовать уровню ТС.
для этого я решил сделать минимум изменений,
что бы код был "максимально узнаваемым" ТС.

исправил лишь откровенный косяк,
ради исправления которого и была создана эта темы.

Добавлено через 37 секунд
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
а есть иные способы замены символов?
достаточно перебрать символы до нуль-терминатора.
не нужно перебирать весь массив.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
08.04.2015, 23:01 12
Цитата Сообщение от Yanush Посмотреть сообщение
это вы не мне писали.
Вам. memset не за чем вызывать, если нужно инициализировать нулями.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
не нужно перебирать весь массив.

Не по теме:

Тьфу ты, что-то я сегодня рассеянный.

0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
08.04.2015, 23:02 13
Цитата Сообщение от hoggy Посмотреть сообщение
для этого я решил сделать минимум изменений,
что бы код был "максимально узнаваемым" ТС.
исправил лишь откровенный косяк,
ради исправления которого и была создана эта темы.
Понятно.
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
а есть иные способы замены символов?
Код в 5-ом посте.
0
08.04.2015, 23:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2015, 23:02
Помогаю со студенческими работами здесь

При выводе массива выводятся лишние непонятные символы
Имеется массив vord из 10 символов. Ввожу несколько символов(например 4 символа) в этот массив....

Отображаются лишние символы при выводе массива символов
#include &lt;iostream.h&gt; #include &lt;string.h&gt; // для функций str*...

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

Программа работает правильно, но при выводе появляются лишние цифры
Программа реализует метод Гаусса с выбором главного элемента по столбцу. Все работает верно, кроме...


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

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