2013-09-25 51 views
0

我得到了一个新的生产线时,我正在写一个文件,但我不明白为什么:回到线写在文件C语言

for(j = 0; j < p_bdClients->tabClient[i].nbComptes; j++){ 
    fprintf(p_fichier, "%s %f\n", 
     p_bdClients->tabClient[i].folios[j].unCompte, 
     p_bdClients->tabClient[i].folios[j].solde); 
} 

我:

compte1 
solde1 
compte2 
solde2 

我想有:

compte1 solde1 
compte2 solde2 

我有p_bdClients->tabClient[i].folios[j].unComptep_bdClients->tabClient[i].folios[j].solde不换行。

我尝试这样做:

for(j = 0; j < p_bdClients->tabClient[i].nbComptes; j++){ 
    printf("%s\n", p_bdClients->tabClient[i].folios[j].unCompte); 
} 

和我:

compte1 
compte2 

但这代码:

for(j = 0; j < p_bdClients->tabClient[i].nbComptes; j++){ 
    printf("|%s| %f\n", 
     p_bdClients->tabClient[i].folios[j].unCompte, 
     p_bdClients->tabClient[i].folios[j].solde);    
} 

给输出 -

| solde1 
| solde2 

我没有第一个“|”和p_bdClients->tabClient[i].folios[j].unCompte我不明白为什么。

随着:

for(j = 0; j < p_bdClients->tabClient[i].nbComptes; j++){ 
    for(w=0; w<strlen(p_bdClients->tabClient[i].folios[j].unCompte); ++w){ 
     printf("%02hhx ", p_bdClients->tabClient[i].folios[j].unCompte[w]); 
} 
} 
printf("\n"); 

我有:

68 79 70 6f 74 68 65 71 75 65 0d 63 68 65 71 75 65 0d 65 70 61 72 67 6e 65 32 0d 
63 68 65 71 75 65 0d 63 61 72 74 65 2d 63 72 65 64 69 74 0d 
68 79 70 6f 74 68 65 71 75 65 0d 63 61 72 74 65 2d 63 72 65 64 69 74 0d 65 70 61 72 67 6e  65 31 0d 63 68 65 71 75 65 0d 65 70 61 72 67 6e 65 32 0d 
63 68 65 71 75 65 0d 63 61 72 74 65 2d 63 72 65 64 69 74 0d 65 70 61 72 67 6e 65 31 0d 
68 79 70 6f 74 68 65 71 75 65 0d 
63 68 65 71 75 65 0d 65 70 61 72 67 6e 65 32 0d 

感谢您的帮助

+2

什么是实际字节?而不是printf(“%s \ n”),打印每个字节:for(w = 0; w SheetJS

+5

Pourquois utiliser%f? – JoelFan

+0

@Nirk我编辑我的帖子 – Ajouve

回答

4

0X0D在每一行的末尾(例如,“68 79 70 6F 74 68 65 71 75 65 0d“)是carriage return。不要将它存储在unCompte(或将其设置为0x00),一切都会好起来的。

+0

我设置了\ 0感谢您的帮助 – Ajouve

1

你是否可能剥离换行符(或用先前剥离的换行符读取数据)?看起来像回车,ASCII 0x0D,在十六进制转储中可见,没有正确的剥离。修复。

请注意,文件中的新行可能是CR(0x0D)和LF(0x0A)ASCII字符的不同组合,具体取决于文件的创建位置和方式。 LF(Unix)和CR + LF(MS-DOS/Windows)是最常见的。

在许多终端中,打印CR会将光标移动到行首,然后(不跟随下一行移动到下一行)旧行字符将被覆盖,导致输出混淆,如果这不是故意的。