在 C 中用空格打印给定的输入字符串

问题描述 投票:0回答:1
# 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
c scanf newline c-strings trailing-newline
1个回答
0
投票

问题是

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] );
       ^^^

它允许跳过空白字符。

© www.soinside.com 2019 - 2024. All rights reserved.