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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2014, 13:25   #1
guroDragon
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 83
По умолчанию Фун-я в Си

Всем привет.
У меня есть проблемка. Не могу полностью разобраться с фу-ями, так вот. У меня фу-я проверяет длину введённой строки. Если она больше 10, то просит ввести заново. Но при правильном повторном вводе вылетает, помогите, плиз.
Вот код:
Цитата:
int checkName (char name[10])
{
while (strlen(name)<=0 || strlen(name)>10)
{
printf("Error.");
printf("Enter the name...");
scanf("%s",name[10]);
}
return name[10];
}

printf("Enter the name...");
scanf("%s",list[1].name);
checkName(list[1].name);
printf("%s",list[1].name);
Спасибо.
guroDragon вне форума Ответить с цитированием
Старый 02.04.2014, 14:11   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

guroDragon

strlen(name)<=0

функция strlen не может вернуть значение меньше нуля
но это мелочи, а проблема в том, что неправильно вводишь строку - ты в scanf засунул лажу, а т.к. scanf считается устаревшей и опасной, то получился конфуз.

Код:
void enter_string(char* buf, size_t max_length)
{
    do
   {
        fgets(buf, max_length, stdin);
   } while (strlen(buf) < 10);
}
примерно так
Rififi вне форума Ответить с цитированием
Старый 02.04.2014, 17:32   #3
guroDragon
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
guroDragon

strlen(name)<=0

функция strlen не может вернуть значение меньше нуля
но это мелочи, а проблема в том, что неправильно вводишь строку - ты в scanf засунул лажу, а т.к. scanf считается устаревшей и опасной, то получился конфуз.

Код:
void enter_string(char* buf, size_t max_length)
{
    do
   {
        fgets(buf, max_length, stdin);
   } while (strlen(buf) < 10);
}
примерно так
Спасибо большое.
Не подскажите, где можно про потоки прочитать в си? Почему тут у нас stdin, а не stream например.
guroDragon вне форума Ответить с цитированием
Старый 02.04.2014, 20:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Почему тут у нас stdin, а не stream например.
Наверное потому что stdin это поток ввода с клавиатуры (по умолчанию) для консольных программ организуемый самой ОС для этого типа программ.
Кстати fgets() можно заменить на gets() тогда не придется stdin писать. Или на scanf(). Хоть она и устарела.
А читать про стандартные потоки ОС нужно наверное в описании API этой ОС.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ работа с файлами, фун-ция strtok Александр293 Помощь студентам 0 08.06.2012 17:56
Построить график фун-ии MrVi Помощь студентам 6 17.03.2012 23:33
Pascal Сама обработка, с входом на фун-цию BanzoO Помощь студентам 3 08.12.2009 18:03