【问题标题】:c int comparrison for finish loopc int比较完成循环
【发布时间】:2015-07-08 18:58:01
【问题描述】:

我有以下函数,里面有一个do while 循环:

void GetFiveNumericValues()
{
    int validationResult;
    char input[5];
    do
    {
        printf("Please enter 5 digits:\n");
        validationResult = scanf("%s", &input);

        printf("Validation result: %d\n", validationResult);
    } while (validationResult != 1);
    // while (!(validationResult == 1));
    // while (validationResult > 1 || validationResult < 1);
}

即使validationResult == 1,循环也没有结束。
我在这里错过了什么?

【问题讨论】:

  • 我认为问题在于 scanf 使用获取输入
  • 允许以字符串形式输入。

标签: c int do-while


【解决方案1】:

input[] 太小,无法容纳 5 个字符的字符串,因为除了 5 个输入字符之外,它还需要容纳终止的 '\0'。如果您实际上输入了 5 个字符,那么您有缓冲区溢出和未定义的行为。将其更改为至少:

char input[6];

还有这一行:

validationResult = scanf("%s", &input);

应该是:

validationResult = scanf("%s", input);

因为input 已经是一个有效的指针。

或者更好:

validationResult = scanf("%5s", input);

这也将防止缓冲区溢出,即使您输入无效。

【讨论】:

  • 感谢您的解释,而不仅仅是给出答案
【解决方案2】:
int validationResult;
unsigned input[5];
do
{
    printf("Please enter 5 digits:\n");
    validationResult = scanf("%1u%1u%1u%1u%1u", input, input+1, input+2, input+3, input+4);
    printf("Validation result: %d\n", validationResult);
    if(validationResult != 5){
        while(getchar()!='\n');
    }
} while (validationResult != 5);

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 2016-03-25
    • 1970-01-01
    • 2018-10-04
    • 2022-01-24
    • 1970-01-01
    • 2019-03-25
    • 2014-09-16
    • 2015-03-02
    相关资源
    最近更新 更多