The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Пожалуйста, помогите разобраться. (Язык С)"
Отправлено dimus, 24-Янв-06 09:40 
Это тоже была моя первая книга, но было это давно. Материал сильно устарел. В топку ее, как советуют некоторые товарищи, я бы отправлять не спешил, так как изложение там расчитано на очень неподготовленного человека и многие моменты разжевываются основательно. Но книгу с актуальным на сегодня изложением вам надо взять обязательно.
Я переписал программы так, как они должны выглядеть сегодня. Я их не компилировал, но вроде должно работать :)

Пример №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++;
   }
}
//------------------------------------

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, [email protected] (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру