int cent(char vv[])
{
int answer, i;
if ((vv[0]>=0 && vv[0]<=9) || (vv[0]!='-'))
answer=0;
else {
i=1;
while (vv[i]>=0 && vv[i]<=9)
i++;
if (vv[i]=EOF)
answer=1;
else
answer=0;
}
return answer;
}
Если ввести сначала знак '-', а потом какую угодно ерунду, она возвращает 1. Я ума не приложу, в чём тут дело. Много раз пересматривал -- вроде, всё правильно.
В C/C++, "=" - это оператор присваивания. Всегда и везде, даже в условии if.
Если трудно запомнить, что в C/C++ оператор равенства - это "==", то можно взять за правило при сравнении в качестве левого значения использовать константу, например "if(EOF=vv[i])". В это случае ошибка была бы найдена при первой попытке компиляции.
while (vv[i]>=0 && vv[i]<=9)
i++;
if (vv[i]==EOF)
answer=1;
else
answer=0;
почему-то стал всегда выдавать answer=0. Я пробовал '\n' вместо EOF -- не помогло. Что делать?
Не надо гадать.
Глеб, вот тебе подсказка. Подумай: ты ввёл массив из n символов и передал его в функцию. функция, как ты помнишь, работает с самим массивом, а не с его копией. Что из себя представляет элеменнт номер n массива? (Нумерация элементво, напомню, начинается с ноля)
Ну, и про кавычкм не забывай, сказал что поставил, а я их что-то не наблюдаю.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Подумай: ты ввёл массив из n символов и передал его в функцию. функция, как ты помнишь, работает с самим массивом, а не с его копией. Что из себя представляет элеменнт номер n массива?
Я так думаю, он представляет из себя символ. Но это не проясняет для меня ситуацию.
Подумай: ты ввёл массив из n символов и передал его в функцию. функция, как ты помнишь, работает с самим массивом, а не с его копией. Что из себя представляет элеменнт номер n массива?
Я так думаю, он представляет из себя символ. Но это не проясняет для меня ситуацию.
А какой именно символ? Я скажу, конечно, ты не думай ничего такого, но... cогласись, как-то не очень это будет... Подумай ещё. Посмотри в учебник.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
На всякий случай: вот так у меня сейчас выглядит функция:
Соответственно, не работает. Со значками >= и <= точно можно так поступать?
Какой символ? n+1-ый, наверное, символ.
Пойдёт
Теперь по символу. Он называется символ конца строки, он не \n и не EOF, он сам по себе. Он- одни ноли. Вот так вот 00000000. Это ты прочитай в книге. Вот с ним и надо сравнивать. Вот так:
Видишь, если мы сравниваем с нулём (как с числом, но не как с символом), то и элемент массива vv нужно тоже сделать числом. А правильно будет сказать: "преобразовать к типу int", что я и сделал, написав (int). Вот, собственно и всё. Вся функция. Про значки я ничего не понял. Да там ничего сложного быть не должно.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо, теперь заработало. Просто в книжке (КиР) было написано, что строка, получаемая из scanf(), всегда заканчивается EOF.
А что значит запись "(int) vv[i]"?
Спасибо, теперь заработало. Просто в книжке (КиР) было написано, что строка, получаемая из scanf(), всегда заканчивается EOF.
А что значит запись "(int) vv[i]"?
Ещё бы не заработало... Кто делал то...
А вообще эта запись значит, что переменная vv [i] становится переменной типа int. Она, как видно из заголовка функции имеет тип char. Проще говоря, она- символ. А теперь она становится числом. Но! Опять же, не абы каким, а тем, которое соответствует символу. А вот на этой весёлой нотке я закончу- тут долго объяснять, ты лучше в книге прочти. И обязательно купи что-то помимо K&R. Я этих авторов вообще засунул куда подальше и учусь по двум другим книгам. А в них очень редко заглядываю.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Похоже, я неправильно понял: в гл. 7.4 ("Форматный ввод") сказано, что по исчерпании файла, scanf выдаёт EOF. Соответственно, я подумал, что для системы поток ввода -- это тоже что-то вроде файла.
А в главе 1.9 ("символьные массивы") сказано, что getline в конец создаваемого симвойльного масива помещает '\n'. Соответственно, я пробовал сравнивать и с ним.
Это код Глеба, Вы answer из него не убрали, как нам советовали, только комментарии добавили. Покажите, как обойтись без answer.
Я учусь только.
1) Убейте код, оставьте комментарии
2) Я для вас только хорошего желаю (С) http://www.kdevelop.org/ Просто давите F10(F11) и смотрите как работает ваша программа. Это очень интересно, нет, в правду!