行注释里面的\符号,请特别小心

博客指出代码注释里不能使用行继续符\\,因为使用后下行会被注释掉,这是关于代码注释的一个重要注意点。
代码注释里面不能有行继续符\,否则下行会被注释掉.
#include <stdio.h> #include <string.h> #define MAX_SIZE 10000 // 输入最大长度 #define STACK_SIZE 1000 // 栈大小 // 将内部表示的符号转换为实际输出字符串 void print_symbol(char c) { if (c == '<') printf("/*"); else if (c == '>') printf("*/"); else printf("%c", c); } int main() { char input[MAX_SIZE] = {0}; char temp[1000]; char stack[STACK_SIZE]; int top = -1; // 栈顶指针 // 读取多输入,直到遇到单"."结束 while (fgets(temp, sizeof(temp), stdin)) { if (temp[0] == '.' && (temp[1] == '\n' || temp[1] == '\0')) break; strcat(input, temp); } int len = strlen(input); int flag = 0; // 错误标记 for (int i = 0; i < len; i++) { // 处理注释符号 /* */ if (input[i] == '/' && i+1 < len && input[i+1] == '*') { if (top >= STACK_SIZE-1) { // 栈满检查 printf("Stack overflow\n"); return 1; } stack[++top] = '<'; // 用'<'代表/* i++; // 跳过下一个字符'*' continue; } if (input[i] == '*' && i+1 < len && input[i+1] == '/') { if (top == -1) { // 栈空错误 printf("NO\n"); printf("?-*/\n"); // 输出缺少左注释 flag = 1; break; } char left = stack[top--]; // 弹出栈顶 if (left != '<') { // 类型不匹配 printf("NO\n"); print_symbol(left); printf("-?\n"); flag = 1; break; } i++; // 跳过下一个字符'/' continue; } // 处理普通括号 if (input[i] == '(' || input[i] == '[' || input[i] == '{') { if (top >= STACK_SIZE-1) { printf("Stack overflow\n"); return 1; } stack[++top] = input[i]; // 左括号入栈 continue; } if (input[i] == ')' || input[i] == ']' || input[i] == '}') { if (top == -1) { // 栈空错误 printf("NO\n"); printf("?-%c\n", input[i]); flag = 1; break; } char left = stack[top--]; // 弹出栈顶 // 检查括号匹配 if (!( (left == '(' && input[i] == ')') || (left == '[' && input[i] == ']') || (left == '{' && input[i] == '}') )) { printf("NO\n"); print_symbol(left); printf("-?\n"); flag = 1; break; } } } // 处理扫描结束后的栈状态 if (!flag) { if (top == -1) { printf("YES\n"); // 全部匹配成功 } else { printf("NO\n"); print_symbol(stack[0]); // 输出栈底第一个未匹配符号 printf("-?\n"); } } return 0; }
最新发布
10-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值