Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> повторный ввод значения если не правильно ввели, scanf в цыкле - пока не истина 
V
    Опции темы
Killer_13
Дата 6.5.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



господа, - мне например нужно чтоб пользователь вводил только 1 или 0
собственно я задаю такое условие, - в итоге зацикливается ввод.
как подправить, чтоб если в строке введены только нулики и единички, чтоб шло дальше

Код

char s[255];
int valid,i=0;

..................................


printf ("\nGeben Zahl von welchem Zahlendarstellung ein->");
scanf ("%d",&b);
if(b==2)
{
do{
printf ("\nGeben zahl->");
scanf ("%s",&s);
lng=strlen(s);

valid=1;
for(i=0;i<lng;i++)
{
if ((s[i] != '0') || (s[i] != '1'))
valid=0;
}

}while (valid == 0);
}

Язык "С"

спасибо.

PM MAIL   Вверх
azesmcar
Дата 6.5.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Код

int checked_input(const char* input, int from, int to)
{
    int res;
    do
    {
        printf(input);
        scanf("%d", &res);
    } while (res < from || res > to);
    return res;
}

Так пойдет? Вызывай функцию, передавай range который нужен.
Код

int v = checked_input("Input number: ", 0, 1);

PM   Вверх
Killer_13
Дата 6.5.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Кажется пойдет, но чуток не пойму как вводить в свою программу.
Если я ввожу первое число, и оно равно "2", идет запрос на следующее число, и его я проверяю до того времени, пока там пользователь не введет строку из "0" и "1", когда пользователь ввел такую строку идет запрос на ввод третьего числа. :(
Надеюсь, я понятливо обьяснил. :(
PM MAIL   Вверх
azesmcar
Дата 6.5.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

Если я ввожу первое число, и оно равно "2", идет запрос на следующее число, и его я проверяю до того времени, пока там пользователь не введет строку из "0" и "1", когда пользователь ввел такую строку идет запрос на ввод третьего числа. :(

Код

int main()
{
    //вводим первое число (для примера я установил лимит от 0 до 10
    int v = checked_input("Input number 1: ", 0, 10); 
    int p;
    //проверяем если введенное число равно 2
    if (v == 2)
    {
        //просим у пользователя новое число, лимит от 0 до 1 (т.е. либо 0, либо 1)
        p = checked_input("Input number 2: ", 0, 1);
        //ввод третьего числа..итд...
        //...
    }
    return 0;
}


Это сообщение отредактировал(а) azesmcar - 6.5.2009, 23:02
PM   Вверх
Killer_13
Дата 6.5.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Работает пасибо огромное.
А не могли бы вы мне еще в кое чем помочь. smile
Буду оч благодарен.
Я там создал тему, и на мои глупые вопросы еще никто не подсказал мне, мне завтра преподу обьяснять, а я не пойму зачем там то все нужно, вот тема link  последнее сообщение
PM MAIL   Вверх
azesmcar
Дата 6.5.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Killer_13

Сегодня уже вряд ли 2 страницы осилю..час ночи все таки. Подумай сам, там полно примеров и текста..перечитай, ничего сложного там быть не может.
PM   Вверх
Killer_13
Дата 6.5.2009, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



а как включить в диапазон еще 6 букв, типо для того чтоб можно было вводить числа шестнадцатиричного формата

Код

int check_inp16(const char* input, int from, int to)
{
    int res;
    do
    {
        printf(input);
        scanf("%d", &res);
        
    } while ((res < from || res > to)||(res < 'a' && res > 'f'));
    return res;
}

PM MAIL   Вверх
Killer_13
Дата 7.5.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



хммм, и наверное нухно пустить в цыкле как-то, а то принимает только 1 символ который лежит в диапазоне, а если я к примеру ввожу, число 562 то соответственно оно не лежит в диапазоне между "0" и"7" к примеру, нужно тогда это число присвоить какой-то строке, и просматривать по очереди каждый символ, тоисть лежыт ли каждый символ в диапазоне от "0" до "7", хммм, но как бы это замутить.. :(
PM MAIL   Вверх
Soah
Дата 7.5.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 6
Всего: 54



Killer_13, если у тебя что-то не получается, попробуй поискать решение и разобраться

можно найти например это
PM MAIL   Вверх
Killer_13
Дата 7.5.2009, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Разобрался. но вот постал вопрос загагулистый

Код

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char transfer (unsigned int, char*, unsigned int);
int check_inp(const char* , int, int);
char check_inp2(const char*);
char check_inp8(const char*);
char check_inp16(const char*);

int main()
{
    char s[255];
    int erg,i=0,lng,in,p,b;

    b = check_inp("Geben Zahl von welchem Zahlendarstellung ein\nvon 0 bis 16-> ", 1, 16); 

    if (b == 2)
        p = check_inp2("Geben Hexadezimalzahl ein 0 oder 1-> ");
    else if (b == 8)
        p = check_inp8("Geben Hexadezimalzahl ein 0..7 -> ");
    else if (b == 16)
        p = check_inp16("Geben Hexadezimalzahl ein 0..9 und a..f -> ");
    else
    {
    printf ("\nGeben Zahlein->");
    scanf ("%s",&s);
    }
    
    in = check_inp("\nGeben Zahl in welchem Zahlendarstellung ein\nvon 0 bis 16-> ", 1, 16);

    transfer(b,s,in);

return 0;
}



и к примеру я вызываю ф-цию 
Код

p = check_inp16("Geben Hexadezimalzahl ein 0..9 und a..f -> ");


вот сама ф-ция
Код

char check_inp16(const char* input)
{
    int i;
    char res[255], s[255];
do
{
    printf(input);
    scanf("%s", &res);
    for(i=0; i < strlen(res); i++){
        if ((res[i] >= '0' && res[i] <= '9')||(res[i] >= 'a' && res[i] <= 'f'))
        s[i]=res[i];
    }
    s[i] = '\0';
}
while((strcmp(s, res))!=0); 
    
    return *s;
}


ПОЧЕМУ Я НЕ МОГУ НАПИСАТЬ ВОТ ТАК?
ПОЧЕМУ НЕ МОГУ ЗНАЧЕНИЕ ФУНКЦИИ ПРИСВОИТЬ ПЕРЕМЕННОЙ ТИПА char?
Код

s = check_inp16("Geben Hexadezimalzahl ein 0..9 und a..f -> ");

мне ф-цыей 
Код

transfer(b,s,in);

нужно передать значение s типа char 

Осталась только вот эта неувязка, и вуаля, все должно работать. smilesmilesmile
Спасибо!
Надеюсь я выклал нормально суть вопроса. smile
PM MAIL   Вверх
math64
Дата 7.5.2009, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Тебе наверно нужно вернуть всю строку, а не первый символ? Результат будет char*, а память его нужно выделить в main() или с помощью malloc() (в main() тогда нужно делать free())
Нужно проверять что введённое число влезет в unsigned int?
Цифры a-f можно вводить заглавными буквами
Код


char* check_inp16(const char* input, char* s)
{
    int i,j;
    res[255];
    int ok = 1;
do
{
    printf(input);
    scanf("%s", &res);
    ok = 1;
    for(i=0, j=0; i < strlen(res) && ok != 0; i++){
        if ((res[i] >= '0' && res[i] <= '9')||(res[i] >= 'a' && res[i] <= 'f')||(res[i] >= 'A' && res[i] <= 'F'))
          s[j++]=res[i];
        else
          ok = 0;
    }
    s[j] = '\0';
}
while(ok == 0); 
 
return s;

}


void main() {
   char res[255];
   char* rez = check_inp16("Geben Hexadezimalzahl ein 0..9 und a..f/A..F -> ", res);

}



Это сообщение отредактировал(а) math64 - 7.5.2009, 09:25
PM   Вверх
Killer_13
Дата 8.5.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Фсе господа НАКОНЕЦ-то сдал, сутку без сна, :(
Но довольній то какой, как камень с плечь. smilesmilesmile
Берусь покорять указатели. smile
Всем спасибо!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.