注册 登录
编程论坛 C++教室

为啥咋输入都输出 耶 啊()TaT

bug芒果核 发布于 2025-09-24 19:58, 161 次点击
#include<stdio.h>
int main(){
    char a[300];
    int x=0;
    scanf("%s",&a[300]);
    for(int i=0;;i++){
        if(a[i]=='(') x++;
        else if(a[i]==')'){
            x--;
            if(x<0){
                printf("NO");
                return 0;
            };
        }
        else if(a[i]=='@') break;
    }
    if(x) printf("NO");
    else printf("YES");
    return 0;
}
题目描述
假设一个表达式有英文字母(小写)、运算符(+、-、*、/)和左右小(圆)括号构成,以 @ 作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则输出 YES;否则输出 NO。表达式长度小于 255,左圆括号少于 20 个。
输入格式
一行:表达式。
输出格式
一行:YES 或 NO。
3 回复
#2
rjsp2025-09-25 08:24
scanf("%s",&a[300]);
改为
scanf("%s",a);

如果表达式包含空白字符的话,scanf( " %[^@]%*c", a );且a以'\0'结尾(不是'@')

[此贴子已经被作者于2025-9-25 08:32编辑过]

#3
yiyanxiyin2025-09-25 10:06
基础知识:  &a[300]表示取a数组的第301个元素的地址, 也就是a数组之外了,越界,  &a[0]这样表示a数组的第一个元素的地址, 或者直接写a, a这个变量本身就是保存的一个地址, 且是数组的首地址
#4
bug芒果核2025-09-25 23:42
回复 2楼 rjsp
1