Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] черный ящик


Автор: klmden 25.11.2010, 09:58
Напишите пожалуйста комментарии на против строчек. что они значат.

Код
#include <process.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  int test_num=35;
  int i=0,j=0,y=0,e=0,rez,mis=0,not=0;

  char *arg[5];
  arg[1]=new char[10];
  arg[2]=new char[10];
  arg[3]=new char[10];
  arg[4]=new char[10];

  char rec_res [30];
  char test_rec [50];
  char exp_res [30];
  FILE *in,*in2;

  clrscr();
  printf("\tПрограмма-тестер\n\tТестирование файла");

  in2 = fopen("TESTS.TXT", "r");

  while( fgets(test_rec, 50, in2) != NULL)
  {
    clrscr();
    in = fopen("RESULT.TXT", "r");
    printf("\tТест номер %i\n\n",i+1);
    printf("\tВ программу передаются аргументы:\n\t");
    j=-1;
    for(y=1; y<=4; y++)
    {
        e=0;
        j++;
        while(j<strlen(test_rec)&&test_rec[j]!=' ')
        {
            arg[y][e]=test_rec[j];
            j++;
            e++;
        }
        arg[y][e]='\0';
    }
    j++;
    e=0;
    while(j<strlen(test_rec))
    {
        exp_res[e]=test_rec[j];
        e++;
        j++;
    }
    for(j=1; j<5; j++)
    {
        printf("%s  ",arg[j]);
    }

    printf("\n\n\tОжидаемый результат: %s\n\n",exp_res);
    rez=spawnv(P_WAIT,"RECT.EXE", arg);
    if(rez!=0)
    {
        printf("\tОшибка! Код ошибки: %i\n",rez);
        not++;
    }
    else
    {
        printf("\tПрограмма выполнена успешно\n\n");
        printf("\tРезультат выполнения: ");
        while (!feof(in))
        {
          if ( fgets(rec_res, 30, in) != NULL )
            printf("%s ", rec_res);
        }
        if(strstr(rec_res,exp_res)!=NULL) printf("\n\tБыл получен ожидаемый результат.\n");
        else
        {
            printf("\n\tПолученный результат не совпадает с ожидаемым!\n"); 
            mis++;
        }
    }
    fclose(in);
    printf("\n\tНажмите любую клавишу для перехода к следующему тесту");
    i++;
    getch();
  }
  clrscr();
  printf("\tБыло проведено тестов: %i\n\tОжидаемый результат не совпал с полученным %i раз\n\tТестируемая программа аварийно завершила работу %i раз",test_num,mis,not);
  getch();
  fclose(in2);
  delete arg;
  return 0;
}



Модератор: Не забываем пользоваться кнопочкой "Код"

Автор: borisbn 25.11.2010, 10:33
 int test_num=35; // переменной test_num присваивается 35
...
  FILE *in,*in2; // содаются два указателя на структуру FILE
...
  clrscr(); // вызывается функция clrscr
...
  in2 = fopen("TESTS.TXT", "r"); // переменной in2 присваивается результат выполнения функции fopen


пойдёт ?

Автор: klmden 25.11.2010, 10:41
Цитата(borisbn @ 25.11.2010,  10:33)
int test_num=35; // переменной test_num присваивается 35
...
  FILE *in,*in2; // содаются два указателя на структуру FILE
...
  clrscr(); // вызывается функция clrscr
...
  in2 = fopen("TESTS.TXT", "r"); // переменной in2 присваивается результат выполнения функции fopen


пойдёт ?

а можно чуть по подробнее. в смысле строчек больше прокомментировать

Автор: jonie 25.11.2010, 11:12
дополню что строки вида:
Код

  {

и
Код

  }

это соотвественно открывающая и закрывающая скобка.

Автор: Cheloveck 25.11.2010, 11:55
klmden, http://forum.vingrad.ru/forum/topic-287943/kw-faq-books-%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D0%B0-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8.html

Автор: xvr 25.11.2010, 12:15
Цитата(klmden @  25.11.2010,  09:58 Найти цитируемый пост)
Напишите пожалуйста комментарии на против строчек. что они значат.

Счас напишу!
Код

#include <process.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
// Подключили кучу инклюдов, не важно - нужны они были или нет

int main()
{
  int test_num=35;
  int i=0,j=0,y=0,e=0,rez,mis=0,not=0;

  char *arg[5];
  arg[1]=new char[10];
  arg[2]=new char[10];
  arg[3]=new char[10];
  arg[4]=new char[10];
// Аффтар был не в курсе, что массивы в С++ индексируются с 0, так же он не в курсе, что в С++ совсем не обязательно все пихать в new. Там и просто память есть :)


  char rec_res [30];
  char test_rec [50];
  char exp_res [30];
  FILE *in,*in2;

  clrscr();
// Кроме того, аффтар видимо последние 30 лет просидел в каком то окопе, иначе не понятна причина применения компилятора (и ОС) 30ти летней давности

  printf("\tПрограмма-тестер\n\tТестирование файла");

  in2 = fopen("TESTS.TXT", "r");
// Еще аффтар не в курсе существования текстовых и бинарных файлов в его любимой консервированной оси.

  while( fgets(test_rec, 50, in2) != NULL)
  {
    clrscr();
// Зато у аффтара видимо стробоскопическое зрение, иначе непонятно, как он сможет увидеть на экране выводы предыдущего printf, если он их практически немедленно стер

    in = fopen("RESULT.TXT", "r");
// Аффтору предупредительный выстрел в голову за многократное открытие/закрытие одного и того же файла в цикле

    printf("\tТест номер %i\n\n",i+1);
    printf("\tВ программу передаются аргументы:\n\t");
    j=-1;
    for(y=1; y<=4; y++)
    {
        e=0;
        j++;
        while(j<strlen(test_rec)&&test_rec[j]!=' ')
// Аффтору оторвать голову за цикл j<strlen(test_rec)
        {
            arg[y][e]=test_rec[j];
// Возможный (и весьма вероятный) выход за пределя массива
            j++;
            e++;
        }
        arg[y][e]='\0';
    }
// За весь вышеизложенный цикл, и за незнание основ string.h (который он кстати зачем то включил в начале) - оторвать руки. Цикл удалить и написать:
///////
   char* tr=strtok(test_rec," ");
   for(y=1; tr && y<=4; y++, tr=strtok(NULL," "))
    {
     char* p=arg[y];
     strncpy(p,tr,10); 
     p[9]=0;
    }
   tr=strtok(NULL,"");
///////

    j++;
    e=0;
    while(j<strlen(test_rec))
    {
        exp_res[e]=test_rec[j];
        e++;
        j++;
    }
// Аффтару оторвать жопу, для решения проблемы кривых рук в корне :) Вместо цикла написать:
   strncpy(exp_res,tr,sizeof(exp_res)-1);

    for(j=1; j<5; j++)
    {
        printf("%s  ",arg[j]);
    }

    printf("\n\n\tОжидаемый результат: %s\n\n",exp_res);
    rez=spawnv(P_WAIT,"RECT.EXE", arg);
    if(rez!=0)
    {
        printf("\tОшибка! Код ошибки: %i\n",rez);
        not++;
    }
    else
    {
        printf("\tПрограмма выполнена успешно\n\n");
        printf("\tРезультат выполнения: ");
        while (!feof(in))
        {
          if ( fgets(rec_res, 30, in) != NULL )
            printf("%s ", rec_res);
        }
        if(strstr(rec_res,exp_res)!=NULL) printf("\n\tБыл получен ожидаемый результат.\n");
// О! Вот зачем был #include <strings.h> в начале!!!
// А за метод проверки правильности результата - расстрелять из рогатки

        else
        {
            printf("\n\tПолученный результат не совпадает с ожидаемым!\n"); 
            mis++;
        }
    }
    fclose(in);
    printf("\n\tНажмите любую клавишу для перехода к следующему тесту");
    i++;
    getch();
  }
  clrscr();
  printf("\tБыло проведено тестов: %i\n\tОжидаемый результат не совпал с полученным %i раз\n\tТестируемая программа аварийно завершила работу %i раз",test_num,mis,not);
  getch();
  fclose(in2);
  delete arg;
// А это вообще шедевр - new делали для одного (и 4 раза), а delete делаем для другого (и 1 раз)!
  return 0;
}

Автор: bsa 25.11.2010, 13:15
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: Cheloveck 25.11.2010, 13:46
Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
Аффтору предупредительный выстрел в голову

Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
Аффтору оторвать голову

Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
оторвать руки

Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
Аффтару оторвать жопу

Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
расстрелять из рогатки

Не слишком жестокое наказание для первокурсника? o_O

Автор: xvr 25.11.2010, 15:45
Цитата(Cheloveck @  25.11.2010,  13:46 Найти цитируемый пост)
Не слишком жестокое наказание для первокурсника? o_O
Нет, не слишком. Может аффтор уверен, что его прога (программой это назвать у меня язык не поворачивается) - верх совершенства. Иначе он бы ее не дал ТС для слизывания (сам ТС явно автором этого опуса не является, иначе не просил бы откоментировать). 
Да и самому ТС будет не вредно узнать оценку качества этой проги  smile 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)