Конференция "Начинающим" » Не могу понять ошибку
 
  • Непрограммист (30.05.18 12:20) [0]
    Здравствуйте мастера Delphi!Вот решал задачу на языке C(Dev C++)

    Задача:
    Вывести текст, составленный из первых букв всех слов; все слова, содержащие больше одной буквы «s».

    Решение:

    #include <stdio.h>

    int main()
    {  
       int    count, coun, n = 0, nArr = 0, pos, test = 0;
       char   str[256] = "Hotels Hello Message One Glass Soft Ass";
       char   arr[256];
       
       n = strlen(str);
     
      for ( count = 0; count <= n-1; count++ )
      {
          if ( str[count] != ' ' )//Если встретилось слово
          {                      
               for ( coun = count; coun <= n-1; coun++ )
               {                      
                   if ( str[coun] == ' ' )//
                   {
                                  // <--- Не хватает test = 0
                        break;
                   }  
                   
                   if ( str[coun] == 'S' || str[coun] == 's' )
                          test++;
                   
                   if ( test == 2 )//
                   {
                        arr[nArr] = str[count];
                        nArr++;    
                        count = coun;//Чтобы цикл count начал
                        test = 0;     //работу со следующего слова
                        break;  
                   }
                   
               }
          }
         
      }
     
      n = strlen(arr);
     
      for ( count = 0; count <= n-1; count++ )
      {
          printf("%c", arr[count]);
      }
     
     
     getch();
    }

    Результат должен быть MGA,а получается gMGA.Функция break не помогает.То есть откуда-то взялся второй элемент первого слова.Но если в блоке условия if ( str[coun] == ' ' ) дописать test = 0; то будет нормальный вывод.Или если ничего не добавлять,но в строке str изменить первое слово "Hotels" на "Hotel"(первое слово без буквы "s")то все будет в порядке.Думал дело в компиляторе,но проверил в онлайн и тоже самое.
    Откуда неверный результат?
  • KSergey © (30.05.18 12:45) [1]
    так это
    в коде же и написано: "Не хватает test = 0"
    Если там вставить test = 0; - то всё заработает как надо.
  • KSergey © (30.05.18 12:49) [2]
    Штука в том, что в слове Hotels была найдена одна s, test стало равно 1
    Доезжаем до слова Message - на первой же букве s у нас test становится равной 2 - хотя это первая буква s в этом слове, он мы же забыли сбрасывать test между словами в 0
    Вот тут и печатается то, на что в этот момент указывает count

    Кстати, концовку с выводом результата можно же упростить:

     }  // это закрывающая от самого первого for(count = 0;
     
     arr[nArr] = '\0';
     printf(arr);
     
     getch();
    }
  • Непрограммист (30.05.18 13:03) [3]
    Спасибо!Элементарные вещи пропустил:)Забыл в конце цикла count обнулить test = 0;Кстати насчет вывода тоже не подумал:)
 
Конференция "Начинающим" » Не могу понять ошибку
Есть новые Нет новых   [118456   +53][b:0][p:0]