В процессе отладки в окне 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;
}

Объяснение кода листинга программы

  1. В начале кода подключаются необходимые библиотеки (stdio.h и conio.h).
  2. Определяется максимальное количество слов, которые будут учитываться в гистограмме (MAX_WORDS).
  3. Задается символ, который обозначает окончание ввода (exit_char).
  4. В основной функции int main() инициализируются переменные: с (для хранения введенного символа), lenword[MAX_WORDS] (массив для подсчета количества символов в каждом слове), i, j, currword (для хранения индексов и счетчика текущего слова).
  5. Задается начальное значение для всех элементов массива lenword[].
  6. Запускается цикл while, который выполняется до тех пор, пока не будет введен символ конца файла (EOF), не будет введен символ окончания ввода (exit_char) и пока не будет достигнуто максимальное количество слов (MAX_WORDS).
  7. Внутри цикла проверяется, является ли введенный символ буквой от 'A' до 'z'.
  8. Если символ не является буквой, то проверяется, находится ли в данный момент в слове (in_word). Если это так, то увеличивается счетчик слова (currword) и сбрасывается флаг in_word.
  9. Если символ является буквой, то устанавливается флаг in_word и увеличивается счетчик в соответствующем слове (lenword[currword]).
  10. Если введено слово из гистограммы, то выводится символ новой строки, а затем выводится гистограмма (массив lenword[]) с помощью символа '#'.
  11. Если введено слово, но оно не учтено в гистограмме (lenword[i] < MAX_WORDS), то выводится сообщение об ошибке no words entered.
  12. Если введено корректное слово и выполнены условия, то программа ожидает нажатия клавиши для продолжения работы.
  13. В конце программы вызывается функция getch(), которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет клавишу.
  14. Программа возвращает 0, что означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы