코드에 간단한 printf 줄을 추가하고 이전 줄이 실행되는지 여부에 영향을줍니다. 터미널을 다시 시작했지만 여전히 동일합니다. 나는 온라인 컴파일러와 집행자에게 그것을 시험해 보았지만 아무런 문제가 없다. 그러나 내 컴퓨터에는이 문제가있다. PC를 다시 시작해도 도움이되지 않습니다.추가 printf 줄을 추가하면 C 코드에 영향을받습니다.
else
{
lf++;
}
내가
else
{
lf++;
printf("\ndo we even get here?\n");
}
로 교체 할 때이 LF가 http://www.tutorialspoint.com/compile_c_online.php
에, "4 문자열을"증가 내 PC에 프로그램 출력 "0 문자열"되지 넣어 그것을 두 플랫폼 모두에서 "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;
}
내가
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
를 제외하고이 코드 조각에 mylib.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
스택 오버 플로우에 오신 것을 환영합니다! [___MCVE___] (http://stackoverflow.com/help/mcve)를 만드시겠습니까? –
** ALL WARNINGS **를 사용하여 컴파일하고 경고를 유의하십시오 ('gcc -Wall -Wextra ...'또는'clang -Weverything ...'). – pmg
UB처럼 들립니다. 확실하지 않습니다. 더 많은 코드를 붙여 넣으십시오. –