If语句,不允许我输入,没有If也可以工作(在C中)



我正在尝试制作一个程序,提示您选择1或2。1是制作文件,2是追加文件。每当我用if运行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);
}
}

scanf调用后

scanf("%d", &opt);

输入缓冲区包含新的行字符'n',对应于按下的回车键。

所以fgets的下一次调用读取一个包含这个新行字符的空字符串。

解决这个问题的一个简单方法是使用函数scanf代替fgets,例如

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

如果文件名不能包含空格,那么写

会更简单
scanf( "%19s", fname );

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

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

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

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

要获取变量opt的值,您可以在本例中使用atoistrtol函数将字符串转换为整数。

请记住,函数fgets也可以用新的行字符附加读字符串,您应该至少在变量fname中删除该行字符。要做到这一点,你需要包括标题<string.h>,并写入例如

fgets( fname, sizeof( fname ), stdin );
fname[ strcspn( fname, "n" ) ] = '';

scanf()函数之后尝试使用getchar()

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

相关内容

  • 没有找到相关文章

最新更新