如何在运行时设置fgets()长度(在C中)



我是C语言的新手。

我想在运行时确定fgets((长度,类似于:

int i;
char str[100];
scanf("%d",&i);    
fgets(str, i, stdin);

在执行时,程序只是跳过我的fgets((行,没有错误;我在dbg里什么也没看到。

如果我为输入长度设置一个具体的值,它就可以正常工作。

fgets(str, 10, stdin);

有人能帮我了解一下发生了什么事吗?根据这个C参考,第二个参数是一个简单的int。

这是完整的例子:

#include <stdlib.h>
#include <stdio.h>
int main() {
int i;
char str[100];
puts("Enter a number: ");
scanf("%d", &i);
fgets(str, i, stdin);
printf("String contents: %s", str);
return 0;
}

Vs。工作正常的硬编码值:#包括<stdlib.h>#包括<stdio.h>

int main() {

char str[100];
fgets(str, 10, stdin);
printf("String contents: %s", str);
return 0;
}

通过调用scanf,您请求用户输入一行文本。scanf("%d", &i);消耗用户在该行中输入的数字,但将新行字符留在缓冲区中。稍后的fgets读取该新行字符,这将导致它不再读取,因此从fgets中获得一个空行。在呼叫scanf()后使用getchar()消耗新行字符:

int i;
char str[100];
scanf("%d",&i);
getchar();
fgets(str, i, stdin);

或者,更彻底地说,在scanf之后,如果用户输入了其他文本:,则消耗整个行的剩余部分,直到新的行字符

int i;
char str[100];
scanf("%d",&i);
while (getchar() != 'n')
;
fgets(str, i, stdin);

最新更新