# include<stdio.h>
int main(){
printf("Enter The Number Of Words\n");
int num;
scanf("%d",&num);
char str[num][50];
printf("User Please Enter The Name !!\n");
for (int i = 0; i < num; i++)
{
gets(str[i]);
}
printf("Your Entered Name Is:\n");
for (int j = 0; j < num; j++)
{
puts(str[j]);
}
return 0;
}
例子:
Enter The Number Of Words
2
User Please Enter The Name !!
Ram Kumar
Your Entered Name Is:
Ram Kumar
我给了 2 个字,但他只打包了 1 个字并打印了??
为什么会这样。 预期输出………… 例子:
Enter The Number Of Words
2
User Please Enter The Name !!
Ram Kumar
Anand Kumar
Your Entered Name Is:
Ram Kumar
Anand Kumar
问题是
scanf
的调用
scanf("%d",&num);
之后输入缓冲区包含对应于按下的 Enter 键的换行符
'\n'
。所以 gets
的下一次调用读取一个空字符串。
函数
gets
不安全,C标准不支持。所以不要使用它。
按照以下方式更改
main
中的代码
int main( void )
{
printf("Enter The Number Of Words\n");
int num;
scanf("%d",&num);
char str[num][50];
printf("User Please Enter The Name !!\n");
for (int i = 0; i < num; i++)
{
scanf( " %49[^\n]", str[i] );
}
printf("Your Entered Name Is:\n");
for (int j = 0; j < num; j++)
{
puts(str[j]);
}
return 0;
}
注意格式字符串中的前导空格
scanf( " %49[^\n]", str[i] );
^^^
它允许跳过空白字符。