为什么我运行此代码时此C代码不接受输入。该程序无需任何输入即可存在

时间:2019-10-18 10:45:25

标签: c

#include <stdio.h> 

main()
{
    int t,i;
    scanf("%d",&t);

    check();
    return 0;
}

int check()
{ 
    char s[20];
    gets(s);

    printf("%s",s);
    return 1;
}

当我运行此检查功能时,此功能不接受输入并立即退出。我不知道为什么要告诉我

2 个答案:

答案 0 :(得分:1)

在scanf中%d后面使用空格字符以读取跟随输入值的白色字符。

换句话说,使用:

scanf("%d ", &t);

还请注意,gets已过时多年。它容易受到缓冲区溢出攻击。请改用fgets

这是该程序的固定版本:

#include <stdio.h> 

#define CHECK_BUFSIZE 19

int check()
{ 
    char s[CHECK_BUFSIZE+1];
    fgets(s, CHECK_BUFSIZE, stdin);
    printf("%s",s);
}

int main()
{
    int t,i;
    scanf("%d ",&t);   
    check();
    return(0);
}

答案 1 :(得分:0)

如果在主函数之后编写函数,则必须声明该函数。 gets已被弃用,所以scanf是更好的选择。

#include <stdio.h> 
int check();
main()
{
    int t,i;
    scanf("%d",&t);

    check();
    return 0;
}

int check()
{ 
    char s[20];
    scanf("%s",s);

    printf("%s",s);
    return 1;
}

此外,如果要在字符串中输入带空格的字符串,请在scanf函数中使用“%[^ \ n]”而不是“%s”