C

时间:2017-02-25 03:19:07

标签: c windows file-io

我必须学习C langague的基本知识。所以,这意味着我仍然是一个菜鸟。但是,在创建代码后发生了一件奇怪的事情。我的代码的基础是创建一个带有数字的文本文件,然后在另一个文本文件中,反转这些数字。

这是我的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_LIGNE 80

int main()
{
    char ligne[MAX_LIGNE] = {0};
    FILE* fdFichierentree;
    FILE* fdFichiersortie;

int *tableau =0;
int termine = 0;
char * nomFichierEntree = "entreeTexte.txt";

if ((fdFichierentree = fopen(nomFichierEntree, "w")) == NULL)
{
    printf("Creation de %s impossible\n", nomFichierEntree);
    _getch();
    exit(0);
}

char * nomFichierSortie = "sortieTexte.txt";

if ((fdFichiersortie = fopen(nomFichierSortie, "w")) == NULL)
{
    printf("lecture de %s impossible\n", nomFichierSortie);
    _getch();
    exit(0);
}



while (!termine)
{
    printf("(E)ntree le ou les nombres ou (Q)uitter\n");
    switch (_getch())
    {
    case 'e':
    case 'E':
        printf("entrer les nombres :");
        fgets(ligne, MAX_LIGNE, stdin);
        fprintf(fdFichierentree, "%s", ligne);
        break;
    case 'q':
    case'Q':
        termine = 1;
        break;
    }

}




int nb = 0;
while (fgets(ligne, MAX_LIGNE, fdFichierentree))
    ++nb;

tableau = (int*)malloc(sizeof(int)*nb);
rewind(fdFichierentree);

nb = 0;
while (fgets(ligne, MAX_LIGNE, fdFichierentree))
{
    tableau[nb++] = atoi(ligne);
}

int i;
for (i = nb - 1; i > -1; --i)
    fprintf(fdFichiersortie, "%d\n", tableau[i]);



fclose(fdFichierentree);
fclose(fdFichiersortie);

}

奇怪的东西出现在文件texte中。例如,如果我将10和20写为数字,则文件文本将包含两个数字,但也是80-n的奇怪i,其中n是我选择的数字。在我的例子中,我将得到数字10和20以及80 - 2,所以78 i在我的文本文件的其余部分。

以下是截图:

enter image description here

我的代码中有一些部分是法语的,这是正常的,因为我是法国人。对不起。

我希望有人能在我的代码中找到我的错误!

1 个答案:

答案 0 :(得分:0)

这一行:

procedure b2 (p_param1 in varchar2) is

      v_member_list        member_nos_type;

    begin
      if p_param1 = 'BASKETBALL' then
      for rec in (Select membernos
                  from my_members
                  WHERE id in (2,4))
      loop
       v_member_list.extend();     
       v_member_list(rec):= rec.membernos;    

      End loop;   
      end if;

      For i in 1..v_member_list.count
      loop

       dbms_output.put_line(v_member_list(i));

      end loop;

    end;

仅打开文件进行写入。

因此使用相同的if ((fdFichierentree = fopen(nomFichierEntree, "w")) == NULL) 进行阅读将无效。

建议:

fdFichierentree

所以也可以从文件中读取。