Недавно мне поручили создать декомментатор программ на C для одного из моих занятий. Хотя это короткий и простой небольшой проект, я столкнулся с проблемой, которая стала серьезной головной болью. Программа работает на 100% нормально, за исключением того, что она не распознает кавычки на моем компьютере Mac. Однако мой профессор проверил его на своем компьютере с Linux, и он работал без проблем. Вот исходный код:
#include <stdio.h>
#define IN 0
#define OUT 1
#define QUOTE 2
int main(int argc, char** argv) {
int state = OUT;
int reader;
while ((reader=getchar()) != EOF) {
if (state==OUT) {
if (reader=='\"') {
state = QUOTE;
}
if (reader=='/') {
if ((reader=getchar()) == '*') { state = IN; continue; }
else putchar('/');
}
if (reader!=EOF) putchar(reader);
} else if (state==QUOTE) {
if (reader=='\"') state = OUT;
putchar(reader);
} else {
if (reader=='*') {
if ((reader=getchar()) == '/') state = OUT;
}
}
}
return 0;
}
Когда я ввожу следующий ввод (через перенаправление оболочки в терминале):
/* это тест */ это все еще тест « /* все еще тест */ »
/* «больше тестирования» */
Я получаю следующее в качестве вывода:
это все еще тест « »
Скорее, чем:
это все еще тест " /* все еще тест */ "
Я попытался протестировать следующий фрагмент кода, используя тот же ввод, но он ничего не напечатал:
int reader;
while ((reader=getchar()) != EOF) {
if (reader=='\"') printf("true")
}
Я совершенно ошеломлен этим, но, возможно, кто-то здесь знает решение?
switch(state) {}
плюсcontinue;
. Вы также можете добавить некоторые подсостояния для /* amd */ - person wildplasser   schedule 19.02.2014