gpt4 book ai didi

c - fgets 不接受最后一个值?

转载 作者:行者123 更新时间:2023-12-02 09:06:29 28 4
gpt4 key购买 nike

我有一个家庭作业问题:-

1) User will input the number of names he wants to input.

2) He will then input those names.

3) We have to print those names.

这是我为上述问题编写的代码:-

# include <stdio.h>
# include <stdlib.h>
# include <stdbool.h>

int main()
{
int n; // number of names user wants to input.
scanf("%d", &n);

char *array[n]; //creating an array of pointers.

int i;
for(i = 0; i < n; i++)
{
array[i] = malloc(21*sizeof(char)); // allocating memory to each pointer.
}

for(i = 0; i < n; i++)
{
fgets(array[i], 21, stdin); //getting the values.
}

for(i = 0; i < n; i++)
{
printf("%s", array[i]); // printing those values.
}
return 0;
}

上述代码的问题在于它没有打印用户输入的最后一个值。

示例:输入示例:-

5
raj
chris
ben
abhay
gautam

预期输出:-

raj
chris
ben
abhay
gautam

我的输出:-

raj
chris
ben
abhay

编辑:

更改此行后:-

scanf("%d", &n);

scanf("%d", &n);

工作正常。

最佳答案

第一个 scanf("%d", &n); 在输入流中留下了一个换行符,因此 fgets 读取的第一个字符串只是一个换行符。您需要在读取名称之前删除该换行符。

如果你改变

for(i = 0; i < n; i++)
{
printf("%s", array[i]); // printing those values.
}

for(i = 0; i < n; i++)
{
printf("String %d : |%s|", i, array[i]); // printing those values.
}

很容易看出...

您将得到输出:

String 0 : |
|String 1 : |raj
|String 2 : |chris
|String 3 : |ben
|String 4 : |abhay
|

注意第一个字符串只是一个换行符...

我通常的建议是...不要使用scanf(用于读取数字)。这看起来是一个很简单的功能,但实际上使用起来非常困难,并且会导致很多错误。而是使用 fgets 后跟 sscanf。另外,您还应该检查 sscanf/scanf 实际上返回 1。

关于c - fgets 不接受最后一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57679180/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com