打印数组元素到终端和txt文件的C程序

ffscu2ro  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(105)

我应该使用的API是open(),write()和sprintf()。如果你要发布一个回答的回应,请不要推荐任何其他的API。
我的程序应该扫描10个元素,然后以相反的顺序将元素打印到终端和一个txt文件中。

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <err.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
        int fd;
        char buffer[100];
        int *arr;
        int i;
        arr = malloc(10 * sizeof(int));
        fd = open("file.txt", O_WRONLY | O_CREAT, 0644);
        if (fd < 0)
        {
            perror("write() failed\n");
            exit(-1);
        }

        printf("Input 10 elements in the array:\n");

        for(int i = 0; i < 10; i++){
            scanf("%d", &arr[i]);
        }

        printf("\nElements in array are: ");
        sprintf(buffer, "Elements in array are: ");
        // write(fd, buffer,strlen(buffer));

        for(int j=9; j>=0; j--){
          //print to console
          printf("\n%d ", arr[j]);
          sprintf(buffer,"\n%d", arr[i]);
        }

        //write to file
        write(fd, buffer,strlen(buffer));
        
        close(fd);

        free(arr);
        printf("\n");
        return 0;
}

数组的元素以相反的顺序打印到终端,非常好。我所停留的地方是将其打印到文本文件。我知道如何使用fprintf()并使用该API写入文本文件,但现在我的指令是使用open()和write()。在我的文本文件中,我有以下内容:
1
我的问题是我能做些什么来修复这个问题,并在txt文件中获得正确的输出。谢谢。
我试过上面的代码。

zynd9foi

zynd9foi1#

在这个for循环中

for(int j=9; j>=0; j--){
      //print to console
      printf("\n%d ", arr[j]);
      sprintf(buffer,"\n%d", arr[i]);
    }

数组arr的每个元素被写入buffer的开始处,覆盖buffer的先前内容。
你可以这样写

int offset = 0;
    for(int j=9; j>=0; j--){
      //print to console
      printf("\n%d ", arr[j]);
      offset += sprintf(buffer + offset,"\n%d", arr[i]);
    }

在这种情况下,数组的每个下一个元素都将追加到已经存储在buffer中的字符串。
这是一个演示程序。

#include <stdio.h>

int main( void )
{
    int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    const size_t N = sizeof( arr ) / sizeof( *arr );
    char buffer[100];

    int offset = 0;
    for (size_t i = N; i != 0; )
    {
        offset += sprintf( buffer + offset, "\n%d", arr[--i] );
    }

    puts( buffer );
}

程序输出为

9
8
7
6
5
4
3
2
1
0

另一种方法是将此语句

write(fd, buffer,strlen(buffer));

在for循环中。

相关问题