我在代码中添加了一个简单的printf行,它会影响之前的行是否会被执行。我重新启动了终端,但它仍然是一样的。我在一个在线编译器和执行器上尝试过它并没有问题,但在我的电脑中我遇到了这个问题。重启电脑无济于事。
else
{
lf++;
}
当我把这个lf没有增加并且程序输出" 0字符串"在我的电脑上," 4弦"在http://www.tutorialspoint.com/compile_c_online.php
当我用
替换它时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
答案 0 :(得分:1)
在使用变量之前不要初始化变量,因此调用未定义的行为。
您需要将 //inside toggle button
toggleButton = (ToggleButton)findViewById(R.id.sound);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.theme);
if(toggleButton.isChecked())
mp.start();
toggleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!toggleButton.isChecked()){
mp.pause();
}
else {
mp.start();
mp.isLooping();
}
}
});
,j
等设置为零。