Это тоже была моя первая книга, но было это давно. Материал сильно устарел. В топку ее, как советуют некоторые товарищи, я бы отправлять не спешил, так как изложение там расчитано на очень неподготовленного человека и многие моменты разжевываются основательно. Но книгу с актуальным на сегодня изложением вам надо взять обязательно.
Я переписал программы так, как они должны выглядеть сегодня. Я их не компилировал, но вроде должно работать :)Пример №1 должен выглядеть примерно так:
// В учебнике
main()
{
char letter; /*Работает с int ?*/
letter = getlet();
putchar('\n'); /* зачем нужно? */
printf("Вы ввели символ %c", letter);
}
char getlet() /*Работает с int ?*/
{
printf("Введите символ:");
return(getchar());/*Как это работает?*/
}
// Должно быть так
// Подключаем подсистему ввода-вывода
#include <stdio.h>
// Определим прототип функции
char getlet( void );
// main возвращает тип инт и принимает число
// аргументов командной строки и массив указателей на эти аргументы
int main( int argc, char* argv[] )
{
char letter;
letter = getlet();
// Это нужно, чтобы перевести каретку на новую строку.
// Можно было просто написать символ новой строки в самом начале
// строки последующей функции printf - "\nВы ввели символ %c"
putchar('\n');
// Выводим введенный символ.
// Я бы добавил в конец символ неревода
// строки - "Вы ввели символ %c\n"
printf("Вы ввели символ %c", letter);
// Выйдем из функции майн. Возвращаемое майн число - код
// завершения программы. По традиции код успешного завершения - ноль
// Поэтому выйдем с кодом ноль
return 0;
}
//---------------------------------------
// Реализация функции getlet
char getlet()
{
printf( "Введите символ: " );
// Так как функция getchar возвращает тип int, а нам нужен char,
// то выполним принудительное приведение типов - для этого надо
// перед функцией в скобках поместить наименование нужного нам типа
return (char)getchar();
}
//---------------------------------------
Программа номер два:
// В книге:
int corect, wrong;
main()
{
char question;
int answer;
corect=0;
wrong=0;
ask("4+5=", 9);
ask("6+2=", 8);
ask("5+5=", 10);
ask("4+7=", 11);
printf("Количество верных ответов: %d\n",corect);
printf("Количество неверных ответов: %d\n",wrong);
}
// Это что-то ужасное...
ask(qest, ans)
char quest[15];
int ans;
{
int guess;
printf("%s",quest);
scanf("%d",&guess);
if(guess==ans)
++corect;
else
++wrong;
return(0);
}
// Должно быть:
#include <stdio.h>
// Определим прототипы функций:
// void перед именем функции означает, что она ничего не возвращает
// А принимает функция строку с вопросом и правильный ответ (число)
void ask( char* quest_string, int ans );
// Не определяйте кучу переменных в одной строчке - нарушается
// удобочитаемость программы
// Вообще идея определять кучу глобальных переменных не очень хороша -
// это вносит дополнительную путаницу, затрудняет последующее
// сопровождение и модернизацию программы
int corect;
int wrong;
int main( int argc, char* argv[] )
{
char question; // ??? Зачем эта переменная
int answer; // И эта тоже не нужна
corect=0;
wrong=0;
// В реальной программе это надо было бы засунуть в цикл
ask("4+5=", 9);
ask("6+2=", 8);
ask("5+5=", 10);
ask("4+7=", 11);
printf("Количество верных ответов: %d\n",corect);
printf("Количество неверных ответов: %d\n",wrong);
return 0;
}
//------------------------------------
// Я заново переписал эту функцию - больно жутко выглядел оригинал
void ask( char* quest_string, int ans )
{
int result; // Переменная, где храним ответ пользователя
// Выведем приглашение:
printf( "Сколько будет %s ", quest_string );
// Не люблю scanf, но для такого случая она пойдет :)
scanf( "%d", &result );
// Посмотрим, что тут у нас
if( result == ans )
{
// Угадал
printf("\nПравильно!\n");
correct++;
}
else
{
// Не Угадал
printf("\nНеправильно!\n");
wrong++;
}
}
//------------------------------------