Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 20:53   #11
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Из-за чего программа может работать таким образом?

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

main()
{
char gwords[5][40], temp[40];
int ls = 0;

printf("\n *** Проверка на наличие в слове цифр *** \n");
printf("\n Введите 5-ть слов: \n");
for(int i = 0; i<5; i++)  
{
     bool isHasDigits = false;
  	 int j=0; 
	 
	 gets(temp);
	  
     while(temp[j]!='\0')
	 {
	      if(temp[j]>='0' && temp[j]<='9')
     	  {
       	  isHasDigits = true;
       	  break;
     	  }
     j++;     
  	 } 
	 if(!isHasDigits)
   	 {
     strcpy(gwords[i], temp);
     ls++;
   	 } 
	 
}

puts("\n В словах нет цифр:");
for(int i = 0; i<ls+1; i++)
     
	 puts(gwords[i]); 
getch();
}
Безымянный.jpg
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось ACE Valery; 02.04.2012 в 21:19.
Bugrimov вне форума Ответить с цитированием
Старый 02.04.2012, 21:03   #12
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

Код:
if(!isHasDigits)
{
strcpy(gwords[i], temp);
ls++;
}
А что вы записываете в gwords[i] если всё-таки цтфра была найдена в слове?
Судя по коду ничего - вот это ничего и видно в вашем скрине крякозябрами.
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 02.04.2012, 21:05   #13
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

вот именно ничего, как тогда лучше сделать
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.04.2012, 21:09   #14
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Строчка, которую ты ввел второй, содержала цыфру: "ролроп8".
И была отбракована алгоритмом.

В результате, в области памяти, где должна была хранится эта строка, если бы она не была забракована, осталась неинициализированной. Соотвественно содержит мусор. Который и выводится вместо этой строчки.
_Bers вне форума Ответить с цитированием
Старый 02.04.2012, 21:16   #15
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

эту строку нужно чем-то заполнить...? так....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.04.2012, 21:17   #16
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
эту строку нужно чем-то заполнить...? так....
Согласно задаче.
_Bers вне форума Ответить с цитированием
Старый 02.04.2012, 21:23   #17
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

можно сделать, чтобы он эту строку вообще не выводил?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.04.2012, 21:29   #18
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

Легко - заполните gwords[i] чем-то конкретным (?пробелом?), потом сравните перед выводом, не равно ли ваше слово этому конкретному, и выводите только тогда, когда не равно вот тут:
Код:
for(int i = 0; i<ls+1; i++)
puts(gwords[i]);
кстати это ls не работает, лучше уж пишите и тут 5.
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 02.04.2012, 21:58   #19
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

for(int i = 0; i<5; i++)
if(gwords[i]!=" ")
puts(gwords[i]);

и все равно пробелы выводит
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.04.2012, 22:05   #20
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Конечно:

Код:
int main()
{
    char gwords[5][40];
    printf("\n *** Проверка на наличие в слове цифр *** \n");
    printf("\n Введите 5-ть слов: \n");

    size_t i=0, maxOfWords=5;
    while(i<maxOfWords)
    {
        gets(gwords[i] ); size_t j=-1;
        while( ++j,    gwords[i][j]!='\0' && gwords[i][j]<'0' || gwords[i][j]>'9');
        (gwords[i][j]=='\0') ? ++i : --maxOfWords;
    }
    if(i==5) { puts("\n В словах нет цифр:"); }
    for(size_t n = 0; n<i; ++n) { puts(gwords[n]); }
}

Последний раз редактировалось _Bers; 02.04.2012 в 22:32.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с деструктором при выводе массива WebbMan Общие вопросы C/C++ 6 28.03.2011 22:23
Ошибка при выводе xml DKENT Работа с сетью в Delphi 0 08.02.2011 21:49
Ошибка при выводе trad Общие вопросы C/C++ 7 15.01.2011 11:32
Отступы при выводе массива Kasper1 Общие вопросы по Java, Java SE, Kotlin 1 03.01.2011 23:20
Портится кодировка при выводе массива в файл delias Win Api 3 20.04.2010 10:05