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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функциональный КОСЯК 
:(
    Опции темы
Ufyljy
  Дата 20.10.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

/* -_-_ Создано: 
                 Автор: 
        Дополнения: 
                    Коррекции:
        Благодарности: wils0n, DjoNIK, FREEDEV, Kuvaldis, Lazin
*/   

#include<stdio.h>
#include<conio.h>

#define test puts("*");
#define br putchar('\n');

char mill[10]; int k,i,l,m;
char point='y';

int textModule()
{
    puts("Zdrastvuytu!");
    puts("V etoy programme vam nado vvesti chislo");
    puts("Nachinayushiesya na '1' s nnim chislom 0");
    
    br;
}

int howNum()
{
    k=0;
    
    for(i=0; i<10; i++)
    {
             if(mill[i]=='1')
             {
                           k=k+1;
             }
    }
 
} 

int firstNum()
{
    printf("Enter mill: "); scanf("%s",&mill);
    if(mill[0] != '1') {printf("\a"); firstNum();}
    howNum();
}

int askQu()
{
    br; br;
    printf("Jelaete li vi vvesti ehe (y or n)? "); scanf("%s",&point);
    if(point == 'y' or point == 'Y') {firstNum();}
}
   

main()
{
      textModule(); firstNum();
      
      if(k = 1)
      {printf("Bessmilennoe virajenie");}      

      askQu(); getch();
}


Программа компилируется smile И это уже должно радовать, однако, как всегда что-то должно насрать на душу.
Если рассказать: Программа проверяет - считается ли первый элемент строки =1, если да, то выдает "бессмысленное выражение",
если нет - это уже другая история.. Самое главное, что после этого в конце задается вопрос: хотите ли еще ввести число?
Допустим, да, вводим число =1. 
НО программа не выдает "бессмысленное выражение", ПАЧЕММУУУ?

PM MAIL   Вверх
Daevaorn
Дата 20.10.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(Ufyljy @  20.10.2007,  12:47 Найти цитируемый пост)

НО программа не выдает "бессмысленное выражение", ПАЧЕММУУУ?

потому что ты этого не запрограммировал.
PM MAIL WWW   Вверх
Goganchic
Дата 20.10.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

 if(k = 1)

может быть ты имел ввиду:
Код

 if(k == 1)

PM Jabber   Вверх
Ufyljy
Дата 20.10.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



> потому что ты этого не запрограммировал.
Конкретней
PM MAIL   Вверх
S.A.G.
Дата 20.10.2007, 18:54 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Цитата(Ufyljy @  20.10.2007,  17:40 Найти цитируемый пост)
Конкретней

Если пытаешься считать строку, то адрес определять ненужно т.к. имя массива является адресом его первого элемента.

Неправильно:
Код
scanf("%s", &mill);

Правильно:
Код
scanf("%s", mill);


Условие составлено неверно:
Код
 if(point == 'y' or point == 'Y')

Правильно:
Код
 if((point == 'y') | (point == 'Y'))


Окончательный вариант работающей программы:

Код
/* -_-_ Ñîçäàíî: 
                 Àâòîð: 
        Äîïîëíåíèÿ: 
                    Êîððåêöèè:
        Áëàãîäàðíîñòè: wils0n, DjoNIK, FREEDEV, Kuvaldis, Lazin
*/   

#include<stdio.h>
#include<conio.h>

#define test puts("*");
#define br putchar('\n');

char mill[10]; int k,i,l,m;
char point='y';

int textModule()
{
    puts("Zdrastvuytu!");
    puts("V etoy programme vam nado vvesti chislo");
    puts("Nachinayushiesya na '1' s nnim chislom 0");
    
    br;
    return 0;
}

int howNum()
{
    k=0;
    
    for(i=0; i<10; i++)
    {
             if(mill[i]=='1')
             {
                           k=k+1;
             }
    }
    return 0;
 
} 

int firstNum()
{
    printf("Enter mill: "); scanf("%s", mill);
    if(mill[0] != '1') {printf("\a"); firstNum();}
    howNum();
    return 0;
}

int askQu()
{
    br; br;
    printf("Jelaete li vi vvesti ehe (y or n)? "); scanf("%s",&point);
    if ((point == 'y') | (point == 'Y')) {firstNum();}
    return 0;
}
   

int main(void)
{
      textModule(); firstNum();
      
      if(k = 1)
      {printf("Bessmilennoe virajenie");}      

      askQu(); getch();
      return 0;

}


Это сообщение отредактировал(а) S.A.G. - 20.10.2007, 19:20


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
S.A.G.
Дата 20.10.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



Не забывай возвращать 0, если в определении или прототипе у тебя заявлено, что функция возвращает значение.


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
archimed7592
Дата 20.10.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(S.A.G. @  20.10.2007,  18:54 Найти цитируемый пост)
if(point == 'y' or point == 'Y')

Тут всё правильно.


Цитата(S.A.G. @  20.10.2007,  18:54 Найти цитируемый пост)
if((point == 'y') | (point == 'Y'))

А вот здесь ошибка.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
S.A.G.
Дата 20.10.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



У меня второе компиллируется, а первое - нет.

В чем ошибка?

Сгораю от любопытства, если честно.

Это сообщение отредактировал(а) S.A.G. - 20.10.2007, 19:43


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Daevaorn
Дата 20.10.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(S.A.G. @  20.10.2007,  20:40 Найти цитируемый пост)
В чем ошибка?

побитовое или?
PM MAIL WWW   Вверх
archimed7592
Дата 20.10.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(S.A.G. @  20.10.2007,  19:40 Найти цитируемый пост)
а первое - нет.

Плохой компилятор: см. ISO/IEC 14882:2003 2.5 Alternative tokens.

Цитата(S.A.G. @  20.10.2007,  19:40 Найти цитируемый пост)
У меня второе компиллируется

У меня такое тоже компилируется
Код
((int *)0) = 5;

Только это ещё не означает корректность.

Как уже сказал Daevaorn, ошибка в том, что используешь побитовое "или", а не логическое. В частности, в случае с логическим "или" совсем не нужны скобки вокруг сравнений point == 'y'.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
S.A.G.
Дата 20.10.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

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



А, || надо было.

Круглые скобки - это елемент стиля. Т.е. как кому удобно.


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
Ufyljy
  Дата 22.10.2007, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все равно не работает (уже исправил (k==1) ). Если повторно набираю "1", происходит выход из программы.

Почему это правильно? scanf("%s", mill);
Ведь если даже я укажу адрес, ошибки не будет, компилятор ее не выдаст.


А если это и правильно, я до этого создавал темы, и в коде, который я там выкладывал, где-то было scanf("%s",&mill);
И почему меня до этого никто не поправил?

> Не забывай возвращать 0, если в определении или прототипе у тебя заявлено, что функция возвращает значение.
Стоп, к сожалению я не знаю где это заявляется.

Насколько я знаю оператор && можно заменить на AND, оператор || на OR

PM MAIL   Вверх
Lazin
Дата 22.10.2007, 07:22 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Ufyljy @  22.10.2007,  03:39 Найти цитируемый пост)
Насколько я знаю оператор && можно заменить на AND, оператор || на OR

лучше ненадо, читать потом невозможно будет smile
PM MAIL Skype GTalk   Вверх
archimed7592
Дата 22.10.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(Ufyljy @  22.10.2007,  03:39 Найти цитируемый пост)
Почему это правильно? scanf("%s", mill);
Ведь если даже я укажу адрес, ошибки не будет, компилятор ее не выдаст.

Компилятор не выдаст ошибки даже, если ты напишешь scanf("%s", 21, 17);

Цитата(Ufyljy @  22.10.2007,  03:39 Найти цитируемый пост)
А если это и правильно, я до этого создавал темы, и в коде, который я там выкладывал, где-то было scanf("%s",&mill);
И почему меня до этого никто не поправил?

В данном конкретном случае никакой разницы нет, но если, вдруг, ты заменишь у mill тип на char *, то получишь не совсем тот результат, какой хотел бы...

Цитата(Ufyljy @  22.10.2007,  03:39 Найти цитируемый пост)
Насколько я знаю оператор && можно заменить на AND, оператор || на OR

Только писать их нужно маленькими буквами.

Цитата(Lazin @  22.10.2007,  07:22 Найти цитируемый пост)
лучше ненадо, читать потом невозможно будет smile 

Почему?



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Lazin
Дата 22.10.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(archimed7592 @  22.10.2007,  09:53 Найти цитируемый пост)
Почему?
А зачем превращать С в свой личный язык программирования, сделать так конечно можно, но это плохо с точки зрения стиля.
Цитата(archimed7592 @  22.10.2007,  09:53 Найти цитируемый пост)
Только писать их нужно маленькими буквами.

Почему?
PM MAIL Skype GTalk   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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