#include <stdio.h>
#include <stdbool.h>
int main() {
int c, last_c = '\0';
bool in_comment = false;
bool in_string = false;
while ((c = getchar()) != EOF) {
if (in_string) {
if (c == '"' && last_c != '\\') {
in_string = false;
}
putchar(c);
} else if (in_comment) {
if (c == '*' && last_c == '/') {
in_comment = false;
}
} else {
if (c == '/' && last_c == '/') {
// Skip to the end of the line
while ((c = getchar()) != EOF && c != '\n');
if (c == EOF) break;
continue; // Skip the newline character
} else if (c == '/' && last_c == '*') {
in_comment = true;
} else if (c == '"' && last_c != '\\') {
in_string = true;
putchar('"'); // Include the opening quote
}
putchar(c);
}
last_c = c;
}
return 0;
}
这段代码是一个简单的C语言程序,用于去除C语言代码中的单行和多行注释。它逐字符读取输入,并根据当前字符和前一个字符的状态来决定是否打印该字符。如果遇到了注释的开始(`//` 对于单行注释,`/*` 对于多行注释),则跳过相应的注释部分。同时,它也处理了字符串字面量,确保在字符串中的`/`不会被误认为是注释的开始。注意,这个程序假设输入是有效的C代码,并且没有处理一些特殊情况,比如字符串跨越多行或注释中的引号等。