我最近被分配了为我的一个班级在C中创建一个程序decommenter的任务。虽然这是一个简短的小项目,但我遇到了一个令人头痛的问题。该程序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;
}
当我输入以下输入时(通过终端中的shell重定向):
/ *这是一个测试* /这仍然是一个测试“/ *仍在测试* /”
/ *“更多测试”* /
我得到以下输出:
这仍然是一个测试“”
而不是:
这仍然是一个测试“/ *仍在测试* /”
我尝试使用相同的输入测试以下代码,但它没有打印任何内容:
int reader;
while ((reader=getchar()) != EOF) {
if (reader=='\"') printf("true")
}
我完全被这个目瞪口呆,但也许这里有人知道解决方案?
答案 0 :(得分:3)
您键入的引号已替换为引号。当您在终端中键入引号时不应该发生这种情况,因此我猜您使用某些文本编辑器创建了一个文本文件,然后将该文本文件提供给您的程序。如果是这样,那么只需编辑您的文本文件,在系统偏好设置 - &gt;中禁用“智能引号”。键盘 - &gt;文字,用直引号替换你的引号,然后再试一次......
答案 1 :(得分:1)
嗯,你正在为你的程序提供LEFT DOUBLE QUOTATION MARK(“)和右双引号(”)而不是引号(“)。