我做了一个程序,它从文本文件中逐行读取输出,并将其放入一个数组中。所以我得到了一个字符串数组。
当我检查这个字符串数组并检查这些字符串是否满足特定条件时,问题就出现了。当我形成一个满足特定条件的字符串数组时,我得到了空行作为数组元素。
例如:
文本文件中的表达式:
X&Y
X|Y
!X
(X|Y)|Z
(X&Y)|Z
(X&Y)&Z
(X&Y)|Z&(A|B
((X|Y)|Z)&((A|B)|(C&D))
(X&Y)|(Z&(A|B))
(A|B)&(!C)
A|(B&(C&(D|E)))
((X|Y)|(Z&(A|B)))|((C&D)&(D|E))
(A|B)|(C&D)&(D|E)
!A&(B|C)
(A|B)|(C|D)&(D
!A|(B&C)
当我打印一个新的字符串数组,其元素满足特定条件时,我会得到空行作为元素。
X&Y
X|Y
!X
(X|Y)|Z
(X&Y)|Z
(X&Y)&Z
//Here
((X|Y)|Z)&((A|B)|(C&D))
(X&Y)|(Z&(A|B))
(A|B)&(!C)
A|(B&(C&(D|E)))
((X|Y)|(Z&(A|B)))|((C&D)&(D|E))
(A|B)|(C&D)&(D|E)
!A&(B|C)
//Here
有些应该打印的元素因为那些空行而没有打印出来?谁能帮我去掉这些空行?
代码如下:
int main()
{
FILE *dat;
int number_of_elements;
char str[MAX][MAXLEN];
int NumberOfRightBracket=0;
int NumberOFLeftBracket=0;
int NumberOfOperators=0;
int Number=0;
int i=0;
char g[200][MAXLEN];
dat=fopen("dat.txt","r");
if(dat==NULL)
{
printf("Error");
}
while(!feof(dat) && !ferror(dat))
{
if(fgets(str[i],100,dat)!=NULL)
str[i][strcspn(str[i],"\n")] = 0;
char p[100];
strcpy(p,str[i]);
for(int o=0;o<strlen(p);o++)
{
if(p[o]=='(')
NumberOfLeftBracket++;
else if(p[o]==')')
NumberOfRightBracket++;
else if(p[o]=='*' || p[o]=='|' || p[o]=='&' || p[o]=='!')
NumberOfOperators++;
}
if(NumberOfRightBracket!=0 && NumberOfLeftBracket!=0 && NumberOfRightBracket==NumberOfLeftBracket)
{
strcpy(g[i],p);
Number++;
}
else if(NumberOfRightBracket==0 && NumberOfLeftBracket==0 && NumberOfOperators==1)
{
strcpy(g[i],p);
Number++;
}
NumberOfRightBracket=0;
NumberOfLeftBracket=0;
NumberOfOperators=0;
i++;
}
for(int k=0;k<Number;k++)
{
printf("%s\n",g[k];
}
}
1条答案
按热度按时间siv3szwd1#
您使用
i
来决定在g
中的什么位置存储来自输入的每一行,并且i
在每次迭代中递增,但是您使用Number
来计算保留的字符串的数量,并且仅在保留字符串时递增Number
。结果是各种
g[i]
,其中您决定不保留字符串,永远不会用行中的数据更新,但您会打印它们。您不需要同时使用
i
和Number
。只需使用一个变量来跟踪到目前为止有多少行以及将下一行放在g
中的什么位置。(You如果程序只应该执行它当前似乎正在尝试的操作,则也不需要
g
。)