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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести вертикальную гистограмму длин слов введенного текста http://www.cyberforum.ru/cpp/thread256332.html
Вывести вертикальную гистограмму длин слов введенного текста
C++ построить,светящийся разными цветами треугольник построить,светящийся разными цветами треугольник http://www.cyberforum.ru/cpp/thread256325.html
Невозможно найти или открыть файл PDB C++
Код программы // FtoM.cpp: определяет точку входа для консольного приложения. // /*Проект 1.1 это программа преобразует фунты в метры. */ #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int _tmain()
C++ Сравнение двух каталогов
Здравствуйте! Помогите, пожалуйста, создать программу. Нужно сравнить два каталога, каждый представляет из себя таблицу с названием объекта и двумя его координатами (в одном каталоге 200 объектов, во втором больше тысячи). Сравнить надо координаты объектов, при условии, что совпавшими считаются координаты отличающиеся на определенную небольшую величину. В итоге, нужно получить третий каталог,...
C++ Как копировать залочены эксплорером файлы http://www.cyberforum.ru/cpp/thread252975.html
Интернет эксплорер загружая поточное видео (файлы с YouTube и пр. сайтов), в каталоге временных файлов создаёт временный flv файл, который и несёт в себе видеоинформацию...Вобщем если его копировать можно легко сохранять видео на комп, но только создатели YouTube позаботились что при закрытии окна с видео временный файл стирается..Как остановить его затирку???
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;
не несёт смысловой нагрузки, и её можно вобще удалить
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru