我正在代碼中添加一條簡單的printf行,它會影響前一行是否會被執行。我重新啓動了終端,但它仍然是一樣的。我在一個在線編譯器和執行器上試了一下,沒有問題,但在我的電腦中出現了這個問題。重新啓動電腦沒有幫助。添加額外的printf行會影響C代碼
else
{
lf++;
}
,當我把這個LF是不是http://www.tutorialspoint.com/compile_c_online.php
增加,我的電腦上的程序輸出「0串」,「4串」當我與
else
{
lf++;
printf("\ndo we even get here?\n");
}
更換它在兩個平臺上輸出「4個字符串」(它應該)。 這背後的原因是什麼?據我所知,一個簡單的printf不應該影響到之前的行是否被執行,與我使用的C編譯器無關。
這裏是原代碼:
#include"mylib.h"
#define MAX 67108863
char tab[100][27];
double val[100];
int l;
void showtab(FILE *fout)
{
int i, j;
printf("\nnumber of strings is %d\n",l);
for(i=0;i<l;i++)
{
fprintf(fout,"%lf ",val[i]);
for(j=0;j<26;j++)
{
if(tab[i][j])
fputc('a'+j,fout);
}
fprintf(fout,"\n");
}
}
int find(char*s, int stl)
{
int i, j, b=1;
for(i=0;i<l;i++)
{
if(tab[i][26]!=stl)
continue;
for(j=0;j<stl;j++)
{
if(tab[i][s[j]-'a']!=1)
{
b=0;
break;
}
}
if(b==0)
{
b=1;
continue;
}
return i;
}
return -1;
}
void clean()
{
int i, j, k, lf=0;
for(i=0;i<l-1 && j<l;i++)
{
if(j<=i)
j=i+1;
if(val[i]==0)
{
while(j<l)
{
if(val[j]!=0)
{
for(k=0;k<27;k++)
tab[i][k]=tab[j][k];
val[i]=val[j];
val[j]=0;
j++;
lf++;
break;
}
j++;
}
}
else
{
lf++;
}
}
l=lf;
return;
}
int main()
{
char s[26], b=1, inequ;
int adr, stl, i;
double v;
FILE* fin=fopen("data","r");
FILE* fout=fopen("canonical.form","w");
l=0;
while(b)
{
fscanf(fin,"%s",s);
if(s[0]!='<' && s[0]!='>')
{
fscanf(fin,"%lf",&v);
stl=strlen(s);
adr=find(s,stl);
if(adr==-1)
{
for(i=0;i<26;i++)
tab[l][i]=0;
for(i=0;i<stl;i++)
tab[l][s[i]-'a']=1;
tab[l][26]=stl;
val[l]=v;
l++;
}
else
val[adr]+=v;
}
else
{
if(s[0]=='<')
inequ=-1;
else
inequ=1;
b=0;
}
}
while(fscanf(fin,"%s %lf",s,&v)==2)
{
stl=strlen(s);
adr=find(s,stl);
if(adr==-1)
{
for(i=0;i<26;i++)
tab[l][i]=0;
for(i=0;i<stl;i++)
tab[l][s[i]-'a']=1;
val[l]=-v;
l++;
}
else
val[adr]-=v;
}
clean();
if(inequ==-1)
fprintf(fout,"0>=\n");
else
fprintf(fout,"0<=\n");
showtab(fout);
return 0;
}
我不使用任何東西我在mylib.h定義的這段代碼除了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
,這裏是輸入文件:
az 1.000000
z -1.000000
bz 1.000000
z -1.000000
abz -1.000000
z 1.000000
ab 1.000000
z 1.000000
abz -1.000000
a -1.000000
b -1.000000
ab 1.000000
<=
ab 1.000000
b -1.000000
zb 1.000000
b -1.000000
azb -1.000000
b 1.000000
ba 1.000000
a -1.000000
za 1.000000
a -1.000000
bza -1.000000
a 1.000000
xyab 3.000000
ab -3.000000
zab 3.000000
ab -3.000000
xyzab -3.000000
ab 3.000000
歡迎來到Stack Overflow!您介意創建[___MCVE___](http://stackoverflow.com/help/mcve)? –
編譯**所有警告**啓用並介意警告('gcc -Wall -Wextra ...'或'clang -Weverything ...')。 – pmg
聽起來像UB。不能確定。粘貼更多代碼。 –