用户输入(字符串)写入文件,直到用户给出一个空行

时间:2018-06-12 07:50:47

标签: c

我正在将用户输入(字符串)写入文件。但是我希望在用户按Enter键而不输入任何字符串时结束程序。 举个例子 输入:

你好,怎么样 你呢!

结束该计划。

我试图用这种方式做到这一点。但是当用户什么都不输入时它就不会停止。

这是我的代码:

#include <stdio.h>
#include <stdlib.h> 


int main(void)
{

    char buffer[1000];

    char sent[1000];
    FILE* ifp = fopen("text.txt", "w");


        while (sscanf(buffer,"%s",sent) == 1) {

        fprintf(ifp,"%s",buffer);

       }
    fclose(ifp);


    return 0;
}

2 个答案:

答案 0 :(得分:2)

在您的代码中:

while (sscanf(buffer,"%s",sent) == 1) {

但无处填写buffer中的任何内容 正如David Collins所建议的那样,对用户fgets()而不是sscanf()更好。你可以这样做:

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>

int main() {
    char input[LINE_MAX];
    FILE *ifp = fopen("text.txt", "w");

    if (ifp == NULL) {
        perror("fopen"); 
        exit(EXIT_FAILURE);
    }

    while (fgets(input, LINE_MAX, stdin) != NULL) {
        if (input[0] == '\n')
            break;

        fprintf (ifp, "%s", input);
    }

    fclose (ifp);
    return 0;
}

答案 1 :(得分:0)

尝试通过以下方式替换您的代码:

char *buffer;

if ((buffer = malloc(sizeof(char) * 1000)) == NULL)
    exit(EXIT_FAILURE);
memset(buffer, 0, 1000);

while (read(0, buffer, 1000) != 0) {
    if (strcmp(buffer, "\n") == 0)
       break;
    fprintf(ifp,"%s",buffer);
    memset(buffer, 0, 1000);
 }

警告用户他不能写超过1000个字符的消息