If 语句,不会让我接受输入并且它在没有 if 的情况下工作(在 C 中)

问题描述 投票:0回答:1

我正在尝试制作一个程序,提示您选择 1 或 2。1 是制作文件,2 是附加文件。每当我使用 if (opt == 1) 运行代码时,它都会跳过询问文件名的提示。我希望我说得很清楚,你能理解我的问题。

预期输出-

输入文件名:(input)

输入文件内容:(input)

实际输出-

输入文件名: 输入文件内容:(input)

#include <stdio.h>

int main(void) {

    char fname[20];
    char fcontents[250];
    int opt;

    printf("Make a file(1),Append a file(2)");
    scanf("%d", &opt);

    if (opt == 1)
    {
        printf("Enter a file name: ");
        fgets(fname, 20, stdin);
        printf("Enter file contents: ");
        fgets(fcontents, 250, stdin);
        FILE* fpointer = fopen(fname, "w");
        fprintf(fpointer, "%s", fcontents);
        fclose(fpointer);
        printf("FILE: %s successfully created", fname);
    }
    else if (opt == 2) 
    {
        printf("Enter a file name: ");
        fgets(fname, 20, stdin);
        printf("Enter file appends: ");
        fgets(fcontents, 250, stdin);
        FILE* fpointer = fopen(fname, "a");
        fprintf(fpointer, "%s", fcontents);
        fclose(fpointer);
        printf("FILE: %s successfully created", fname);
    }
}
c if-statement scanf c-strings fgets
1个回答
1
投票

scanf

的这个电话之后
scanf("%d", &opt);

输入缓冲区包含对应于按下的 Enter 键的换行符

'\n'

所以下一次调用

fgets
会读取一个包含这个换行符的空字符串。

解决问题的一个简单方法是使用函数

scanf
而不是
fgets
,例如

scanf( " %19[^\n]", fname );

如果文件名不能包含空格那么写起来就更简单了

scanf( "%19s", fname );

要读取存储在文件中的内容,最好写

scanf( " %249[^\n], fcontents );

注意格式化字符串中的前导空格。它允许跳过空白字符。

另一种方法是到处使用函数

fgets
.

要获取变量

opt
的值,您可以在这种情况下使用函数
atoi
strtol
将字符串转换为整数。

© www.soinside.com 2019 - 2024. All rights reserved.