Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Удалить комментарии из файла. Помогите найти ошибку. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Невозможно найти или открыть файл PDB http://www.cyberforum.ru/cpp/thread253715.html
Код программы // FtoM.cpp: определяет точку входа для консольного приложения. // /*Проект 1.1 это программа преобразует фунты в метры. */ #include "stdafx.h" #include <iostream> #include...
C++ Сравнение двух каталогов Здравствуйте! Помогите, пожалуйста, создать программу. Нужно сравнить два каталога, каждый представляет из себя таблицу с названием объекта и двумя его координатами (в одном каталоге 200 объектов,... http://www.cyberforum.ru/cpp/thread253128.html
Как копировать залочены эксплорером файлы C++
Интернет эксплорер загружая поточное видео (файлы с YouTube и пр. сайтов), в каталоге временных файлов создаёт временный flv файл, который и несёт в себе видеоинформацию...Вобщем если его копировать...
C++ Менеджер паролей
Доброго всем дня. Выдали мне задание написать менеджер паролей для интернета не зависящий от браузера. Может подскажите с чего начать или литературу какую? )) Первым делам стоит вопрос, как...
C++ Наложение текстур в Directx9 http://www.cyberforum.ru/cpp/thread251695.html
Читаю книгу Горгонова(глава 10), не получается загрузить текстуру и освещение не работает, Visual Studio 2010: #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.lib") #include...
C++ С чего начать изучение Win API? Программирую в Visual Studio 2005 c++ подробнее

Показать сообщение отдельно
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
15.03.2011, 20:43
если тебе встречается слеш (\) то нужно записать в выходной файл два символа подряд(если state позволяет)
а вот эти две строки:
C
1
2
 if  (c == '"') State = Normal;//Является ли c двойной кавычкой?
if ( (c == '\'') || (c == '\"')) State=StrState;//является ли c одинарной или двойной кавычкой?
логически эквивалентны:
C
1
if ( (c == '\'') || (c == '\"')) State=StrState;
state никогда не примет значение Normal.

чтобы проверять на слеш нужно использовать такую конструкцию:
C
1
if (c=='\\') ...
Добавлено через 10 минут
корректно будет так:
C
1
2
3
if  (c == '"') State = Normal;
 
                        if ( (c == '\'') || (c == '\"')) State=StrState;
заменить на:

C
1
2
3
4
5
6
7
if (c=='"') State= Normal; else
if  (c == '\\') 
{
if ((c=fgetc(fi)) == EOF) {/*Дописать сюда код завершения цикла, достигнут конец файла*/}
fputc(c,fo);
continue;
}
Добавлено через 6 минут
C
1
2
3
4
5
case Comment:
                        if ( c=='*')
                                State=EndComment;
                        else State=Comment;
                        break;
если после комментария /* встретится чтото типа a*=2, то программа посчитает это за конец комментария.
Нужно сравнивать два символа: */

Добавлено через 4 минуты
C
1
2
3
4
5
6
7
8
9
 case Normal:
                        State=Normal;
                        if (c == '/')         /* если встретили слэш, */
                                 State = Slash;     /* то перешли в соответствующее состояние */
                        else if (c == '"')
                                 {State=StrState;
                                 fputc(c,fo);}
                                 else fputc(c,fo);
                        break;
можно сократить до:
C
1
2
3
4
5
6
7
8
9
10
 case Normal:
                        
                        if (c == '/')         /* если встретили слэш, */
                                 State = Slash;     /* то перешли в соответствующее состояние */
                        else {
                                 fputc(c,fo);
                                 if (c == '"') State=StrState;
                              }
                                 
                          break;
Добавлено через 2 минуты
C
1
return 0;      /* а это зачем? */
А это затем чтобы вызывающее приложение знало код, который вернула твоя программа. 0=успех.

Добавлено через 3 минуты
C
1
  if (State=Slash)   fputc(c,fo);
это условие выполнятся будет либо всегда либо никогда, в зависимости от численного значения Slash.
Правильно будет так:
C
1
  if (State==Slash)   fputc(c,fo);
Добавлено через 2 минуты
107 строка:
C
1
     else State = OneComment;
не несёт смысловой нагрузки, и её можно вобще удалить
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru