首页 > 解决方案 > scanf() 包含空格字符的句子

问题描述

我正在尝试使用 open()、write() 将用户输入的字符串(使用 scanf())存储在 .txt 文件中。我确实使用缓冲区来存储输入,然后使用 write() 将其发送到文件。问题是我无法存储任何作为空格键字符的“”...它只存储空格之前的字符。但我实际上想一直写到'\ n'。这是我的代码:

 void writing(char* argument){
    int desc_fich=-1, nb_lus=-1, nb_write=-1;
    
    printf("Enter the words : ");

        char entry[50];

        for (int i=0;i<50; i++){
            entry[i]= '\0'; 
        }

        scanf("%s", &entry);

        int i=0;
        int number=0;

        while ( entry[i] != '\0' ){

            number++;
            i++;
        }

        desc_fich = open(argument, O_WRONLY | O_CREAT | O_APPEND);

        nb_write = write(desc_fich, entry, nombre); 


        close(desc_fich);
}

`

标签: clinux

解决方案


scanf("%s", &entry);首先读取并跳过所有前导空白。然后读取并保存可能太多的非空白字符。

而不是scanf()fgets()用来读取一行

   // scanf("%s", &entry);
   if (fgets(entry, sizeof entry, stdin)) {
     ...
     // nb_write = write(desc_fich, entry, nombre);
     nb_write = write(desc_fich, entry, strlen(entry));

推荐阅读