gpt4 book ai didi

printf 可以改变它的参数吗?

转载 作者:行者123 更新时间:2023-12-02 08:59:00 25 4
gpt4 key购买 nike

编辑:完整的 main 代码在这里 http://codepad.org/79aLzj2H

这又是奇怪行为发生的地方

for (i = 0; i<tab_size; i++)
{
//CORRECT OUTPUT
printf("%s\n", tableau[i].capitale);
printf("%s\n", tableau[i].pays);
printf("%s\n", tableau[i].commentaire);
//WRONG OUTPUT
//printf("%s --- %s --- %s |\n", tableau[i].capitale, tableau[i].pays, tableau[i].commentaire);
}


我有一个以下结构的数组

struct T_info
{
char capitale[255];
char pays[255];
char commentaire[255];
};

struct T_info *tableau;

这就是数组的填充方式

int advance(FILE *f)
{
char c;

c = getc(f);
if(c == '\n')
return 0;

while(c != EOF && (c == ' ' || c == '\t'))
{
c = getc(f);
}

return fseek(f, -1, SEEK_CUR);

}

int get_word(FILE *f, char * buffer)
{
char c;
int count = 0;
int space = 0;

while((c = getc(f)) != EOF)
{
if (c == '\n')
{
buffer[count] = '\0';
return -2;
}

if ((c == ' ' || c == '\t') && space < 1)
{
buffer[count] = c;
count ++;
space++;
}
else
{
if (c != ' ' && c != '\t')
{
buffer[count] = c;
count ++;
space = 0;
}
else /* more than one space*/
{
advance(f);
break;
}
}
}

buffer[count] = '\0';
if(c == EOF)
return -1;

return count;
}

void fill_table(FILE *f,struct T_info *tab)
{
int line = 0, column = 0;

fseek(f, 0, SEEK_SET);

char buffer[MAX_LINE];
char c;
int res;

int i = 0;
while((res = get_word(f, buffer)) != -999)
{
switch(column)
{
case 0:
strcpy(tab[line].capitale, buffer);
column++;
break;
case 1:
strcpy(tab[line].pays, buffer);
column++;
break;
default:
strcpy(tab[line].commentaire, buffer);
column++;
break;
}
/*if I printf each one alone here, everything works ok*/
//last word in line
if (res == -2)
{
if (column == 2)
{
strcpy(tab[line].commentaire, " ");
}
//wrong output here
printf("%s -- %s -- %s\n", tab[line].capitale, tab[line].pays, tab[line].commentaire);

column = 0;
line++;
continue;
}
column = column % 3;

if (column == 0)
{
line++;
}

/*EOF reached*/
if(res == -1)
return;

}
return ;
}

编辑:

试试这个

    printf("%s -- ", tab[line].capitale);
printf("%s --", tab[line].pays);
printf("%s --\n", tab[line].commentaire);

给我结果

 --  --abi  -- Emirats arabes unis

我希望得到

Abu Dhabi -- Emirats arabes unis --

我错过了什么吗?

最佳答案

Does printf have side effects?

嗯,它打印到屏幕上。这是一个副作用。除此之外:没有。

is printf changing its parameters

没有

I get wrong resutts [...] what is going on?

如果错误的结果意味着输出没有在应该出现的时候出现,这可能只是一个行缓冲问题(您的第二个版本不打印换行符,这可能会导致输出不被刷新)。

关于printf 可以改变它的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com