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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2013, 20:03   #1
Павел_95
Пользователь
 
Регистрация: 04.11.2012
Сообщений: 22
Подмигивание Проверка сразу 2-х символов текстового массива

Здравствуйте, сразу хочу поздравить всех с Новым Годом, большого успеха и креативности в новом году! Спасибо, что читаете мою тему.
Ну, начнем. У меня есть программа, написанная на Си. Эта программа сделана для того, что бы удалять одно-строчные и много-строчные комментарии. Вроде у меня вышла главная часть программы(кроме разных проверок и исключений): если он видит начало коммента, то заменяет его пробелами до его конца.
Проблема состоит в том, что я мудрено сделал в форе проверку сразу 2-ух символов массива(сначала я просто то, что ввел пользователь перегоняю в массив, а потом с ним уже и работаю) и не знаю правильно ли он работает и вообще, можно ли так. Именно меня само больше смущает эта строчка:
Код:
while(arrow[i] != '*' && arrow[i+1] !='/')
По идее, он должен видеть конец в том случает, если идут 2 последовательных символа "*" и "/", но он ломается даже на нескольких звездочках(****). То есть, он видит 1-ую звездочку и думает сразу что это конец коммента, что меня само больше и огорчает.
Прошу помочь в этом моменте. Желательно указатели не использовать, так как я в них пока что не сильно разбираюсь.
Вот весь код данной функции:
Код:
char turn(char arrow[], int size)
{ 
	for(int i = 0;i<size;i++)
	{
	
		if(arrow[i] == '/' && arrow[i+1] == '*') //проверка 1 на наличие комментария(/* - значит начало)
			{
				arrow[i]=' ',arrow[i+1]=' ';
				
				while(arrow[i] != '*' && arrow[i+1] !='/') //удаление комментария по принципу: пока не будет "*" "/"
				//изменил номера ячеек в условии
				{	
					
					arrow[i] = ' '; // заменяем на " " для визуального стирания символа

					i++;	


					
				}					arrow[i] = ' '; arrow[i+1] = ' ';
			}	
	}
	for(int i = 0;i<size;i++)
	{
		
		if(arrow[i] == '/' && arrow[i+1] == '/' && arrow[i+2] != '/' ) //проверка 1 на наличие однострочного
			{
				while(arrow[i+3] != '\n' ) //удаление комментария по принципу: до следующей строки
				{	
					
					arrow[i]=' ', arrow[i+1]=' ';
					arrow[i+3] = ' '; //заменяем на пробелы
					i++;
				}
			}	
	}
	printf("%s",arrow);
return 0;
}
_________________________________
Еще раз всех с Новым Годом!
Павел.

Последний раз редактировалось Павел_95; 02.01.2013 в 20:35.
Павел_95 вне форума Ответить с цитированием
Старый 02.01.2013, 20:17   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Добрый вечер!
С Новым годом!
Тело цикла с предусловием выполняется до тех пор пока ваше условие будет истинно.
Посудите сами, если вы встречаете символ звездочку, у вас уже в независимости от правого операнда вашего логического выражения, само выражение дает ложь.
Следовательно выполнение цикла прекращается.
Вам следует сменить условие на:
Код:
(arrow[i] != '*'  ||  arrow[i+1] !='/')
Здесь, как только мы встретим символ * и символ / идущие друг за другом, логическое выражение вернет нам нуль (ложь), что и будет являться основанием для завершения цикла.

Последний раз редактировалось Базиля; 02.01.2013 в 20:19.
Базиля вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как всем edit'ам сразу присвоить одно максимальное колличество вводимых символов? Алексей_2012 Общие вопросы Delphi 3 23.10.2012 22:20
Программа печати текстового файла с размещением текста по 64 символов в строку без переноса слов rauhm6 Паскаль, Turbo Pascal, PascalABC.NET 0 06.12.2011 18:21
не сортирует сразу 2 массива ashtone9130 Visual C++ 3 30.05.2011 11:03
Проверка символов HTL Общие вопросы Delphi 6 31.03.2009 12:55
Импорт из текстового файла с ограничителем из 3-х символов. Помогите! uraveselov Microsoft Office Excel 1 31.10.2007 20:38