Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2013, 23:01   #1
CMSon
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 16
Восклицание Корректировать.

При компиляции выдает имена папок, подпапок и файлов в один ряд по вертикали
Как исправить, чтобы "ступенчатый" вид был? Чтобы было видно, какая подпапка в какой папке.
Спасибо.

Код:
void directory (char *file)
{
	struct _finddata_t c_file; 
	intptr_t hFile; 
	int a=strlen (file);
	char *name = (char*)malloc((a+5)*sizeof(char));
	strcpy(name, file);
	strcat(name, "\\*.*");
	if((hFile = _findfirst(name, &c_file )) == -1L)
		printf("Нет файлов");
	else
	{	
		do 
		{
			if (int result = strcmp (c_file.name, ".") && strcmp (c_file.name, ".."))
			{	
				if (c_file.attrib & _A_SUBDIR) 
				{
					printf ("Dir: ");
					printf ("%-12s\n", c_file.name);
					char *name1 = (char*)malloc((a+strlen (c_file.name)+2)*sizeof(char));
					strcpy(name1, file);
					strcat(name1, "\\");
					strcat(name1, c_file.name);
					directory (name1);
					free (name1);
				}
				else 
					printf( "  %-20s\n", c_file.name); 
			}
		} 
		while(_findnext(hFile, &c_file) == 0);
		_findclose( hFile );
	}
	free (name);
}
int main(void)
{
	directory ("C:\\test");
	getch ();  
}
CMSon вне форума Ответить с цитированием
Старый 31.01.2013, 23:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Опиши переменку типа int. Глобальную.
Код:
void directory (char *file)
{
 level++
...
 for(int i=0;i<level;i++) printf(" ");
 printf( "  %-20s\n", c_file.name); 
...
free (name);
level-- 
}
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.01.2013, 23:20   #3
CMSon
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 16
По умолчанию

о, спасибо!
CMSon вне форума Ответить с цитированием
Старый 31.01.2013, 23:29   #4
CMSon
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 16
По умолчанию

Может, еще поможешь мне в одном коде? :D

Код:
int main()
{
	FILE *f;
	f=fopen(FNAME, "r");
	int stack[200];
	char q[200];
	int sp = 0;
	while(!feof(stdin))
	{
		if(scanf ("%s", q) != 1 )
			break;
		switch(q[0])
		{
		case '\0':
			break;
		case '=':
			printf("Result = %d\n", stack[--sp]);
			break;
		case '+':
			stack[sp-2] = stack[sp-2] + stack[sp-1];
			sp--;
			break;
		case '-':
			stack[sp-2] = stack[sp-2] - stack[sp-1];
			sp--;
			break;
		case '*':
			stack[sp-2] = stack[sp-1] * stack[sp-2];
			sp--;
			break;
		case '/':
			stack[sp-2] = stack[sp-1] / stack[sp-2];
			sp--;
			break;
		default:
			stack[sp++] = atoi(q);
		}
	}
	return 0;
	getch();
}
не считает отрицательные числа, а должен.
CMSon вне форума Ответить с цитированием
Старый 31.01.2013, 23:35   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
не считает отрицательные числа, а должен.
Сейчас, если q начинается с "-", это считается операцией вычитания. Можно предварительно проверять длину q (strlen) и уходить на switch только когда она равна 1.
Abstraction вне форума Ответить с цитированием
Старый 01.02.2013, 01:07   #6
CMSon
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 16
По умолчанию

Укажите на ошибку, туплю

Код:
int main()
{
	FILE *f;
	f=fopen(FNAME, "r");
	int stack[200];
	char q[200];
	int sp = 0;
	while(!feof(stdin))
	{
		if(scanf ("%s", q) != 1 )
		{
			break;
		}
		int LengthString = strlen(q);
		if (LengthString == 1)
		{
			switch(q[0])
			{
			case '\0':
				break;
			case '=':
				printf("Result = %d\n", stack[--sp]);
				break;
			case '+':
				stack[sp-2] = stack[sp-2] + stack[sp-1];
				sp--;
				break;
			case '-':
				stack[sp-2] = stack[sp-2] - stack[sp-1];
				sp--;
				break;
			case '*':
				stack[sp-2] = stack[sp-1] * stack[sp-2];
				sp--;
				break;
			case '/':
				stack[sp-2] = stack[sp-1] / stack[sp-2];
				sp--;
				break;
			default:
				stack[sp++] = atoi(q);
			}
		}
		else
		{
			break;
		}
	}
	return 0;
	getch();
}
CMSon вне форума Ответить с цитированием
Старый 01.02.2013, 10:55   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ошибка: else-ветка пустая, да ещё и выводит из цикла. По идее, если в строке больше одного символа, то это число и поступить с ним надо как с числом.
Abstraction вне форума Ответить с цитированием
Старый 01.02.2013, 12:16   #8
CMSon
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 16
По умолчанию

То есть, мне нужно else рихтовать?
Или просто убрать?
CMSon вне форума Ответить с цитированием
Старый 01.02.2013, 13:46   #9
CMSon
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 16
По умолчанию

Не могли бы вы показать, где и как исправить
С моими поправками при умножении или сложении(не важно) отрицательных чисел, выдается огромное число из памяти, я так понимаю
CMSon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск