我是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);