Это была моя первая публикация, поэтому я извиняюсь за плохой формат и любые необоснованные вопросы.C программа, которая удаляет комментарии
Так что я некоторое время работал над программой «удалить комментарии» и добился прогресса, но очень минимален. Я новичок в C, поэтому я пишу его, используя некоторые основные функции и навыки. Входной файл для кода не требует каких-либо функций для чтения, а вместо этого передается в программу с использованием < в терминале.
Текстовый файл, который я использую содержит следующее:
some/* crazy */stuff
some/* crazy */ stuff
some/*crazy /*crazy*/*/stuff
"some /* crazy */ stuff "
some/* "crazy" */ stuff
some/* crazy stuff
Чтобы проверить различные форматы комментариев. код я до сих пор является:
#include <stdio.h>
#define IN_COMMENT 1
int main(int argc, char **argv)
{
int c;
while ((c=getchar())!=EOF)
{
if(c=='/'&&getchar()=='*')
{
while(c!='*' && getchar()!='/')
{
c = " ";
c= getchar();
}
}
if(c=='"')
{
c=getchar();
while(c!='"')
{
putchar(c);
c=getchar();
}
putchar(c);
}
}
putchar(c);
printf("done.\n");
return 0;
}
Дело в том, что я не могу понять способ установить условие, которое будет распечатать сообщение об ошибке, когда есть случай, в котором запускается комментарий, но никогда не закрывался, такие как (некоторые/* сумасшедшие вещи)
Другая проблема заключается в том, что я не могу показаться, чтобы найти ошибку, которая при запуске программы и ввести текстовый файл опускает *, поэтому, когда я ввод:
some/* crazy */stuff
some/* crazy */ stuff
some/*crazy /*crazy*/*/stuff
"some /* crazy */ stuff "
some/* "crazy" */ stuff
В конечном итоге я получаю следующее: некоторые * материал
some* stuff
some**/tuff
"some /* crazy */ stuff "
some* stuff
Я не могу понять способ исправить эти два вопроса. Профессор предложил другой способ написания программы, определив разные состояния, но когда я попытался, это было еще более запутанным.
Используйте отладчик или добавьте некоторые операторы печати, чтобы вы могли видеть значение переменных в разных точках. Это базовая отладка, которую вам нужно изучить. Вы не можете опубликовать каждую небольшую проблему, которую вы найдете для SO ... – John3136
Переменная 'c' является' int', и все же вы выполняете следующее назначение: 'c =" ";' которые присваивают * указателю * c'. Я думаю, вы хотите сделать это, например. 'c = '';'? –
Java развивается из 'C', поэтому индексирование, такое как [1] и [i], полностью действует в' C'. – Abhi