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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
#1

Вывод строки - C++

04.12.2011, 12:04. Просмотров 312. Ответов 5
Метки нет (Все метки)

Всем привет!

Такой вот вопрос: почему при выводе строки в конце печатаются какие-то непонятные знаки? И как это убрать?

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
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
 
int main()
{
    int i = 0;
    const int N = 10;
    char ch, str[N];
 
    printf("Enter string:\n");
    while ((ch = _getch()) != 13 && i<N)
    {
        if (isalnum(ch) || ispunct(ch)) 
        {
            _putch(ch);
            str[i++] = ch;
        }
    }
        
    printf("\n%s\n", str);
        
 
    return 0;
}
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2011, 12:04     Вывод строки
Посмотрите здесь:

Строки(вывод) C++
C++ Вывод строки в файл
C++ Вывод числа из строки
C++ Вывод строки в printf
C++ Вывод командной строки
Вывод строки в визуалке C++
Некорректный вывод строки C++
C++ Вывод из строки в файл
C++ Строки. вывод не получается
C++ Вывод строки по символам
C++ Вывод слов из строки
Ввод/вывод строки C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3585 / 1365 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.12.2011, 12:20     Вывод строки #2
C
1
str[i]='\0';
добвате

Добавлено через 44 секунды
или при объявлении обнулите строку,
или вводите с помощью fgets
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
04.12.2011, 12:22  [ТС]     Вывод строки #3
Цитата Сообщение от go Посмотреть сообщение
1
str[i]='\0';
добвате
Да, непонятные символы не печатаются, но теперь при вводе 11-го символа (длина строки=10) одновременно с печатью строки появляется окошко с ошибкой: Стек 'str' переполнен.
Можно как-то от него избавиться?

Спасибо.
go
Эксперт C++
3585 / 1365 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.12.2011, 12:33     Вывод строки #4
amfisat, ну вводить надо 9 символ (и длина строки 9 символ должна быть)
если объявили
C
1
char s[10];
ведь десятый символ
C
1
s[9]='\0';//считаем от нуля
Естественно у Вас будет ошибка, выход за пределы

Добавлено через 3 минуты
Вообще попробуйте вот такой ввод
C
1
2
3
4
5
6
7
#include <stdio.h>
 
...
 
char s[10];
 
fgets (s,10,stdin);
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
04.12.2011, 12:35  [ТС]     Вывод строки #5
Спасибо.

Вообще попробуйте вот такой ввод
Мне надо именно посимвольный ввод.

Сделал так:
C++
1
while ((ch = _getch()) != 13 && i<N-1)
go
Эксперт C++
3585 / 1365 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.12.2011, 12:40     Вывод строки #6
amfisat, тогда используйте динамическое выделение памяти, на каждом шаге увеличивая на 1 элемент, с помощью realloc
Yandex
Объявления
04.12.2011, 12:40     Вывод строки
Ответ Создать тему
Опции темы

Текущее время: 18:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru