我正在尝试使用 fgets()
获取输入。我知道我会得到多少行,但它发生了变化,我将行数存储在变量 var
中。我还有另一个名为 part
的变量;它是我得到的行的长度,但由于值之间有空格,我将其乘以 2(我找不到其他解决方案;我可以使用一些建议)。
无论如何,我尝试按照下面的代码获取输入,但是当我输入第一行时,它会自动打破 for
循环并打印随机内容。我认为这与循环中的fgets()
有关;我不知道是否有像这样使用fgets()
。
char inp[var][(2*part)];
int k,l;
for(k=0;k<=var;k++);
fgets(inp[k],(2*part),stdin);
printf("%c\n",inp[0]);
printf("%c\n",inp[1]);
printf("%c\n",inp[2]);
printf("%c\n",inp[3]);
最佳答案
…since there are white spaces between the values I multiplied it with 2…
如果不需要将所有内容存储在堆栈上,则可以将字符串存储在动态分配的内存中。例如:
char* inp[var];
char buf[400]; // just needs to be long
for (k = 0; k < var; k++) {
fgets(buf, 400, stdin);
inp[k] = malloc(sizeof(char) * (strlen(buf) + 1));
strcpy(inp[k], buf);
}
虽然在技术上不符合标准,但 strdup
已广泛使用,并且也使这变得更容易。
就实际问题而言,正如 BLUEPIXY 在上面的评论中所说,您有一些拼写错误。
在 for 循环之后,分号使其表现出意外。
for(k=0;k<=var;k++); fgets(inp[k],(2*part),stdin);
实际上是一样的
for(k=0;k<=var;k++) { ; // do nothing } fgets(...);
删除 for 循环语句后面的分号。事实上,您实际上没有正确阅读,这就是您看到垃圾的原因。
要打印整个字符串,
printf
系列需要%s
格式标志。当您的边界为
k
时,实际上会有var + 1
次循环迭代。如果var
为3
,则k = 0,1,2,3
-> 在检查k
时终止4
。
关于c - 在循环中使用 fgets() 获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43813594/