从文本中读取数字并订购数字

时间:2016-01-12 17:52:13

标签: c file

完成任务:

  

编写一个程序,从文本文件中读取10个整数。该   必须先使用其他代码或使用创建文件   操作系统的设施。写下以下功能:    - 按升序/降序对整数数组进行排序并显示结果    - 计算数组中偶数的数量并显示结果

我的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <string>
void cresc(int citire[20]);
FILE *fpointer;
void main()
{


    char fisier[12];
    int  i,citire[20];
    printf("Dati un nume fisierului:");
    scanf("%s", &fisier);
    strcat(fisier, ".txt");
    fpointer = fopen(fisier, "w");
    fprintf(fpointer, "9865742031");


    fclose(fpointer);

    fpointer = fopen(fisier, "r");
    for (i = 0;i < 9;i++)
        fscanf(fpointer, "%d", &citire[i]);
    fclose(fpointer);


    fpointer = fopen(fisier, "a+");
    fprintf(fpointer,"\nNumerele puse in ordine sunt: \n");
    cresc(citire);

    fclose(fpointer);


    _getch();
}

void cresc(int citire[20])
{
        int i,temp;
        for (i = 0;i < 9; i++)
        {
    if (citire[i] > citire[i + 1])

            {
            temp = citire[i];
                citire[i] = citire[i + 1];
                citire[i + 1] = temp;

            }
    fprintf(fpointer, "%d", citire[i]);
        }
}

有人可以帮助我吗?

我设法解决它,谢谢你的帮助。

如果有人需要,问题就解决了。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <string>

FILE *fpointer;
void cit(int citire[10]);
int paritate(int citire[10]);
void main()
{


    char fisier[12];
    int  i, citire[10], trecere[10], nrpar;
    printf("Dati un nume fisierului:");
    scanf("%s", &fisier);
    strcat(fisier, ".txt");
    fpointer = fopen(fisier, "w");
    fprintf(fpointer, "9 8 6 5 7 4 2 0 3 1");


    fclose(fpointer);

    fpointer = fopen(fisier, "r");
    for (i = 0;i < 10;i++)
        fscanf(fpointer, "%d", &citire[i]);
    fclose(fpointer);


    fpointer = fopen(fisier, "a");
    fprintf(fpointer, "\nNumerele puse in ordine sunt: \n");
    cit(citire);

    nrpar = paritate(citire);
    fprintf(fpointer, "\n\nSunt %d numere pare", nrpar);

    fclose(fpointer);


    _getch();
}

void cit(int citire[10])
{

    int  i,j, temp;
    for (i = 0;i < 10; i++)
    {
        for (j = 0;j<9;j++)
            if (citire[j] > citire[j + 1])

            {
                temp = citire[j];
                citire[j] = citire[j + 1];  //9 8 6 5 7 4 2 0 3 1
                citire[j + 1] = temp;           //buble sort

            }
    }
    for (i = 0;i < 10; i++)

        fprintf(fpointer, " %d", citire[i]);
}

int paritate(int citire[10])
{
    int i, par=0;
for (i = 0;i < 10; i++)
    if (citire[i] % 2 == 0)
        par ++;
return par;


}

1 个答案:

答案 0 :(得分:0)

您需要将表示单个值的字符串写入文件,然后从文件中读取9个整数,但只有一个值。您需要使用非数字字符分隔值,例如

fprintf(fpointer, "9 8 6 5 7 4 2 0 3 1");

然后阅读,改为执行此操作

while ((i < 9) && (fscanf(fpointer, "%d", &citire[i]) == 1))
    ++i;

修复您的cresc()函数,使其将元素数量作为参数

void cresc(int *citire, int count);

和for loop

for (i = 0 ; i < count ; ++i)

在你的main()电话cesc()

cresc(citere, i);