我是编码的新手,如果您能帮助我解决这个问题,我将不胜感激。我无法找出为什么我的代码没有给我正确的结果。谢谢您的宝贵时间!
问: 使用一维数组,计算右括号和右括号的数量。输入必须在一行中。 例如输入:(())) 输出:3 2我使用一个数组在一行中接收输入,并使用for循环来计算打开/关闭括号的数量。
#include <stdio.h>
int main(){
char str[1000]; int l=0;r=0;
printf("Enter:\t");
gets(str);
int length=sizeof(str)/sizeof(str[0]);
for(int i=0;i!=EOF && i<length;i++)
{
if(str[i]=='(')
l++;
else if(str[i]==')')
r++;
}
printf("%d %d",l,r);
}
预期 输入:(()) 输出:2 2
我得到了什么 输入:(()) 输出:6 2
答案 0 :(得分:1)
i!=EOF
,因为这不是文件
int length=sizeof(str)/sizeof(str[0])
没有给出strlen()
中的字符串#include <string.h>
的长度
答案 1 :(得分:0)
您的循环是错误的(实际上是您的情况)
for(size_t i = 0; i < strlen(str);i++)
{
if(str[i]=='(')
{
l++;
}
if(str[i]==')')
{
r++;
}
}
答案 2 :(得分:0)
基本的C学习中涵盖了一些错误。
sizeof(str)/sizeof(str[0]);
返回str
数组的大小,在您的情况下为1000
。要获取用户输入的长度,请使用strlen
函数:int length = strlen(str)
。
稍后,将您的for
循环用作for(int i=0;i<length;i++)
或更高版本:
//Include string.h on beginning of file
#include <string.h>
size_t length = strlen(str);
for (size_t i = 0; i < length; i++) {
//Do your if.
}
答案 3 :(得分:0)
在r的声明中您还会遇到语法错误。 您可能会得到int l = 0,r = 0; 要么 Int = 0; Int r = 0; 虽然,编译器应该已经对此发出警告。