Цитата(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; }
|
|