2014-09-16 4 views
-2

Так что я некоторое время работал над программой «удалить комментарии» и добился прогресса, но очень минимален. Я новичок в 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 

Я не могу найти способ исправить две проблемы. Профессор предложил другой способ написания программы, определив разные состояния, но когда я попытался, это было еще более запутанным.

Пожалуйста, помогите, как это должно быть в ближайшее время, как я могу исправить проблему * и что должно быть мое условие, чтобы я мог распечатать сообщение об ошибке для неполных комментариев?

+1

Откуда эта строка '#define IN_COMMENT 1'? (Подсказка: * состояние *) – usr2564301

+0

@ Jongware в основном профессор предложил использовать состояния, но я пробовал это и не мог понять, как они реализованы. –

+0

Невозможно воспроизвести его. Ваш код не выводит то, что вы говорите. – Zenadix

ответ

0
if(c=='/'&&getchar()=='*') 
    { 
     while(c!='*' && getchar()!='/') 
     { 
      c = " "; 
      c= getchar(); 

     } 

    } 

Здесь вы проверить, является ли «*» и «/» появляются вместе, но только заменить c один раз. Это должно быть:

if(c=='/'&&getchar()=='*') 
    { 
     while(c!='*' && getchar()!='/') 
     { 
      c = " "; 
      c= getchar(); 
      c = " "; 
      c= getchar(); 

     } 

    } 
+0

Но это не просто переназначение пустая строка для C снова? –

+0

C эквивалентен указателю здесь, он относится только к персонажу, который вы изучаете в этот момент времени. 'getchar()' выполняет некоторую арифметику указателя за кулисами и автоматически переходит к следующему символу в потоке всякий раз, когда он вызывается. – Bridge

+0

имеет смысл, но когда я добавил это, результат не изменился –

Смежные вопросы