Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
d1astola
1 / 1 / 1
Регистрация: 06.10.2015
Сообщений: 26
1

Невнятый мусор при выводе

30.07.2017, 09:54. Просмотров 817. Ответов 6
Метки нет (Все метки)

Задача из k&r по преобразованию a-z в abc..xyz, также с цифрами, строчными и возможность обрабатывать вариации ввода типа a-b-c0-9. Написал функцию expand, однако при выводе массива символов вместе с адекватным выводом, выводится и мусор. Прошу вас помочь и объяснить откуда берется этот мусор. Компилировал на gcc 5.4.0 ubuntu. Спасибо
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
58
59
60
61
62
63
64
65
66
#include <stdio.h>
 
void expand(char array[]) {
    unsigned short i, j, k;
    char stepComplete = 0;
    char start, end, type;
    char result[100];
 
    j = 0; k = 0;
 
    for (i = 0; array[i] != '\0'; i++) {
        if (stepComplete == 0) {
            if (array[i] >= 'A' && array[i] <= 'Z') {
                start = array[i];
                stepComplete = 1;
            }
            else if (array[i] >= 'a' && array[i] <= 'z') {
                start = array[i];
                stepComplete = 1;
            }
            else if (array[i] >= '0' && array[i] <= '9') {
                start = array[i];
                stepComplete = 1;
            }
            else {
                result[++j] = array[i];
            }
        }
        else if (stepComplete == 1 && array[i] != '-') {
            stepComplete = 0;
            result[++j] = array[i];
        }
        else if (stepComplete == 1 && array[i] == '-') {
            stepComplete = 2;
        }
        else if (stepComplete == 2) {
            if (array[i + 1] == '-') {
                stepComplete = 1;
            }
            else {
                end = array[i];
                for (k = 0; k <= (end - start); k++) {
                    result[++j] = start + k;
                }
                stepComplete = 0;
            }
        }
    }
    printf("\n");
    printf("%d  %c  %c    ", stepComplete, start, end);
    for(i = 0; result[i] != '\0'; i++) {
        printf("%c", result[i]);
    }
    printf("\n");
    return;
}
 
void main(void) {
    char array[100], c;
    unsigned short i;
    for (i = 0; (c = getchar()) != EOF; i++) {
        array[i] = c;
    }
    expand(array);
    return;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2017, 09:54
Ответы с готовыми решениями:

Инициализация массива - на выводе появляется мусор
Здравствуйте, Только начал изучение С, столкнулся со следующим вопросом....

Мусор при инициализации структуры
Доброго времени суток. Я отказываюсь понимать, какого черта структура не...

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

Мусор в начале строки при записи в файл
Генерирует все как надо, но вначале идет мусор. Есть у кого-нибудь идеи как...

Выводит мусор при отображении цифр по указателю
Здравствуйте, нужно срочно помочь, ввожу программу а вместе цифр выдает...

6
Байт
Эксперт C
18318 / 12029 / 2506
Регистрация: 24.12.2010
Сообщений: 24,293
30.07.2017, 10:22 2
Лучший ответ Сообщение было отмечено d1astola как решение

Решение

d1astola, После строчки 63 напиши
C
1
array[i] = '\0';
Добавлено через 1 минуту
Окромя того c должон быть типа int.
1
d1astola
1 / 1 / 1
Регистрация: 06.10.2015
Сообщений: 26
30.07.2017, 10:36  [ТС] 3
Да, про этот управляющий символ забыл, мусор в конце исчез, но в начале все равно выводится буква "К".
0
Миниатюры
Невнятый мусор при выводе  
MansMI
1448 / 1157 / 549
Регистрация: 08.01.2012
Сообщений: 4,509
30.07.2017, 10:38 4
Цитата Сообщение от d1astola Посмотреть сообщение
++j
пачиму?
1
d1astola
1 / 1 / 1
Регистрация: 06.10.2015
Сообщений: 26
30.07.2017, 10:42  [ТС] 5
Может я что то не так понимаю, но сначала надо присвоить значение массиву на 0 индексе а потом увеличить на 1?

Добавлено через 1 минуту
Хотя да изменил и теперь работает, вероятно инкремент работает иначе чем я предполагал, спасибо
0
Байт
Эксперт C
18318 / 12029 / 2506
Регистрация: 24.12.2010
Сообщений: 24,293
30.07.2017, 10:48 6
Цитата Сообщение от d1astola Посмотреть сообщение
но в начале все равно выводится буква "К"
Картинка на скрине не читаема. Код достаточно объемен. Попробуй пройтись отладчиком или выводи промежуточные результаты.
Побочный совет. Строки 49-54 можно заменить одной
C
1
    printf("\n%d  %c  %c    %s\n", stepComplete, start, end, result);
Добавлено через 2 минуты
Цитата Сообщение от d1astola Посмотреть сообщение
но сначала надо присвоить значение массиву на 0 индексе а потом увеличить на 1?
Цитата Сообщение от d1astola Посмотреть сообщение
вероятно инкремент работает иначе чем я предполагал
Да, именно так. Присвоение result[++j]= надо было заменить на result[j++]=
0
d1astola
1 / 1 / 1
Регистрация: 06.10.2015
Сообщений: 26
30.07.2017, 10:50  [ТС] 7
Да спасибо, ту строчку которую которая выводит этап завершенности, начало и конец я выводил лишь для просмотра промежуточных результатов на этапе написания и ее я удалю.
0
30.07.2017, 10:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2017, 10:50

При загрузке данных из файла выводится мусор
Здравтсвуйте помогите разобраться. написал игру где можно сохранить результат...

Выводится мусор в конце строки при использовании wprintf()
Ну собственно вот: #define UNICODE #define _UNICODE #include &lt;stdio.h&gt;...

При чтении текста из файла в массив в конце появляется мусор
При чтении текста из файла в массив в конце появляется мусор.В чем проблема?...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru