如何确保用户输入值?

时间:2012-10-16 04:41:15

标签: c

我正在尝试使用此代码来验证用户是否输入了值。如果我使用gets(),但是当我将其更改为fgets()时它会停止工作。我希望它保持循环,直到用户输入至少1个字符但少于25个字符串的字符串。如果在我的代码中不明显,我是编程新手。谢谢!

int main(void)
{
    char input[25], inputNew[25];
    int i;
    int x;
    int y;
    do
    {
        printf("Please enter a string less then 25 characters!\n");
        fgets(input, sizeof(input), stdin);  
        y = strlen(input);  
    }
    while(y>25 || y<=0);

    for (i = 0; i <= strlen(input); i++)
    {
        inputNew[i] = toupper(input[i]);
        for (x = 1; x <= strlen(input); x+=2)
        {
        inputNew[x] = tolower(input[x]);
        }
    }
    printf("The new value is: %s.\n", inputNew);
return 0;
}

4 个答案:

答案 0 :(得分:6)

fgets保留结束换行符,而gets则将其抛出。

因此,如果您使用y <= 1,则必须将支票更改为fgets

答案 1 :(得分:1)

首先,请避免任何严重代码中的gets()gets()设计不合理且不安全。永远不要使用它。

二。 fgets()将换行符保留在缓冲区的末尾(而gets()将其丢弃)。

第三,y <= 0fgets()的情况下可能是错误的,因为它可能会读取至少一个字符(换行符)。您应该将其替换为y < 2

最后,大多数重要: 请缩进您的代码。 :)

答案 2 :(得分:0)

nneonneo打败了我的答案:

  

gets()函数等效于具有无限大小的fgets()和   一个        stdin流,但未存储换行符(如果有)        在字符串中。

来自http://www.manpagez.com/man/3/fgets/

我刚刚添加了参考文献......

答案 3 :(得分:0)

您已使用静态大小25声明变量输入。所以我认为没有机会为y = strlen(输入)获得更大的尺寸;

更改您的

char input[25];

char input[100];

任何超过25的。