Шаг 29.
Microsoft Visual C++ 2010. Язык С/С++.
Создание и использование функций. Программа для проверки созданных функций

    На этом шаге мы рассмотрим текст основной программы для тестирования созданных функций.

    Составим теперь основную программу для проверки работы функций getline(), substr(), copy(). Эта программа приведена ниже.

// Strings.cpp: главный файл проекта.

#include "stdafx.h"
#include <clocale> //обязательно для функции setlocale()

#include <stdio.h>	//for getchar(),putchar(),printf()
#include <conio.h>	//for getch()
#include <stdlib.h>	//for exit()
#define  eof -1        //признак конца ввода (Ctrl+Z)
#define  MAXLINE 1000  //размерность массивов (максимальная длина строк)
#define  FROM 2        //константа для выделения подстроки (с этого символа
                       //будет начинаться выделение)
#define HOWMANY 3      //константа для выделения подстроки (столько
                       //символов будет выделено) 

using namespace System;

// -----------------substr (s,n,m) ------------------------
void substr(char v[], char s[], int n, int m)
{
	//n-й элемент находится R массиве на (п-1)-м месте
	int  i,j; 
	for(i=0,j=n-1;j<(n-1+m); i++, j++)
		v[i]=s[j];
	v[i]='\0';
}
// -------------------------------------------------------
int getline(char s[], int lim)
{
	int c,i;
	for(i=0; i<lim-1 && (c=getchar()) != eof && c != '\n'; i++)
		s[i]=c;
	s[i]='\0';
	i++;    //для учета количества 
	return i;
}
// ------ Копирование строки в строку -------------------
void copy(char save[],char line[])
{
	int i=0; 
	while((save[i]=line[i]) != '\0')
		i++;
}
// -------------------------------------------------------


int main()
{
	setlocale(LC_ALL,"Russian"); //функция setlocale() с аргументами
	                             //для корректного вывода кириллицы

	char s[MAXLINE], v[MAXLINE], w[MAXLINE];
	printf("Задайте строку:\n");
	int i=getline(s,MAXLINE);
	copy(v,s);
	substr(w,v,FROM,HOWMANY);

	if((i-1) < FROM) {
		printf("Длина введенной строки недостаточна для извлечения из нее");
		_getch();
		exit(0);
	}

	printf("Введенная строка     = %s\n", s);
	printf("Скопированная строка = %s\n", v);
	printf("Подстрока            = %s\n", w);
    _getch();

    return 0;
}
Архив проекта можно взять здесь.

    Смысл приведенной основной программы ясен из комментария к ней. Заметим только, что здесь встретилась новая библиотечная функция exit(), которая прерывает выполнение программы. Чтобы ее использовать, надо подключить файл stdlib.h. Так как строка символов может быть разной длины, то приходится проверять, достаточно ли в ней символов, чтобы выделить подстроку с указанием количества выделяемых символов и номера символа, с которого начнется выделение:

  if((i-1) < FROM)
Напомним, что длину строки возвращает функция getline(), а количество выделяемых символов мы задали с помощью директивы препроцессора #define.

    В выражении

  if((i-1) < FROM)
мы записали i-1, чтобы длина проверялась без учета символа \0. Если длина введенной строки меньше номера символа, с которого требуется выделять подстроку, то, естественно, надо об эюм сообщить пользователю (что мы и делаем) и завершить программу. Этим занимается функция exit(). Можно было бы добавить к программе блок возврата на повторный ввод новой строки, но у нас была другая задача: познакомиться с работой функций и новой функцией exit(). Результат работы основной программы приведен на рисунке 1.


Рис.1. Результат работы приложения

    На следующем шаге мы рассмотрим внешние и внутренние переменные.




Предыдущий шаг Содержание Следующий шаг