В процессе отладки в окне cmd при нажатии enter курсор переходит на следующую строку вместо выполнения программы - C (СИ)
Формулировка задачи:
Привет! Я новичок, изучаю Си по Керниган и Ричи.
Столкнулся проблемой при выполнении задания:
"Напишите программу, печатающую гистограмму длин слов из файла ввода. Самое легкое - начертить гистограмму горизонтально; вертикальная ориентация требует больших усилий."
После запуска отладки появляется окно cmd, в котором я ввожу необходимые символы, после чего нажимаю enter и вместо запуска выполнения программы, курсор переходит на следующую строку. Среда - MS VS 2012.
Частенько сталкиваюсь с таким поведением, но обычно получается решить вопрос, в этот раз не вышло. Подскажите, а о чем стоит задумываться в первую очередь при таком поведении программы?
#include <stdio.h> #define IN 1 #define OUT 0 #define MAXWORD 80 /* максимальное количество слов */ /* т. е. длина нашей гистограммы */ /* гистограмма длин слов (вертикальная) */ main(){ int i, j, c, state; int lenword[15], nextword, maxword; nextword = 0; for(i = 0; i < 15; i++) lenword[i] = 0; state = OUT; while((c = getchar()) != EOF && nextword < 15){ if(c == ' ' || c == '\n' || c == '\t'){ if(state == IN){ /* запоминаем самое длинное слово, это будет высота нашей гистограммы */ if(lenword[nextword] > maxword) maxword = lenword[nextword]; nextword++; state = OUT; } } else{ if(state == OUT) state = IN; lenword[nextword]++; } } /* печатаем гистограмму */ for(i = 15; i > 0; i--){ for(j = 0; j < nextword; j++){ if(lenword[j] >= i) putchar('#'); else putchar(' '); } putchar('\n'); } }
Решение задачи: «В процессе отладки в окне cmd при нажатии enter курсор переходит на следующую строку вместо выполнения программы»
textual
Листинг программы
#include<stdio.h> #include<conio.h> #define MAX_WORDS 100 //максимальное кол-во введенных слов, учитываемых в гистограмме const char exit_char='*'; // символ окончания ввода int main(){ char с; int lenword[MAX_WORDS],i,j,currword=0; bool in_word=0; for(i=0; i<MAX_WORDS; i++) lenword[i]=0; while((c = getchar())!= EOF && c!=exit_char && currword<MAX_WORDS) { if(c<'A' || c>'z') { if(in_word) { currword++; in_word=0; } } else { in_word=1; lenword[currword]++; } } if(c==exit_char && in_word && currword<MAX_WORDS) currword++; if(!currword) puts("no words entered"); for(i=0;i<currword;i++) { putchar('\n'); for(j=0;j<lenword[i];j++) putchar('#'); } getch(); // задержка перед выходом return 0; }
Объяснение кода листинга программы
- В начале кода подключаются необходимые библиотеки (stdio.h и conio.h).
- Определяется максимальное количество слов, которые будут учитываться в гистограмме (MAX_WORDS).
- Задается символ, который обозначает окончание ввода (exit_char).
- В основной функции int main() инициализируются переменные: с (для хранения введенного символа), lenword[MAX_WORDS] (массив для подсчета количества символов в каждом слове), i, j, currword (для хранения индексов и счетчика текущего слова).
- Задается начальное значение для всех элементов массива lenword[].
- Запускается цикл while, который выполняется до тех пор, пока не будет введен символ конца файла (EOF), не будет введен символ окончания ввода (exit_char) и пока не будет достигнуто максимальное количество слов (MAX_WORDS).
- Внутри цикла проверяется, является ли введенный символ буквой от 'A' до 'z'.
- Если символ не является буквой, то проверяется, находится ли в данный момент в слове (in_word). Если это так, то увеличивается счетчик слова (currword) и сбрасывается флаг in_word.
- Если символ является буквой, то устанавливается флаг in_word и увеличивается счетчик в соответствующем слове (lenword[currword]).
- Если введено слово из гистограммы, то выводится символ новой строки, а затем выводится гистограмма (массив lenword[]) с помощью символа '#'.
- Если введено слово, но оно не учтено в гистограмме (lenword[i] < MAX_WORDS), то выводится сообщение об ошибке
no words entered
. - Если введено корректное слово и выполнены условия, то программа ожидает нажатия клавиши для продолжения работы.
- В конце программы вызывается функция getch(), которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет клавишу.
- Программа возвращает 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д