在循环不工作时测试字符串的NULL值

时间:2017-05-19 08:19:37

标签: c string while-loop

编辑:对不起,它在C而不是C ++中,我有时会混淆它们。我将lengthN == NULL更改为lengthN == 0,并且在输入第一个名称(如果名称超过15个字符)后,我获得了无限循环。

所以我试图让这个东西进入这个游戏的玩家名字我必须为一个作业,并且由于某种原因它不会反复进行循环。循环应该检查字符串长度,如果它设置为NULL,它将在缓冲区之外,它将要求用户重新输入,并将重复自己,直到输入正确的长度。

printf_s("Enter player %d's name (Max 15 characters): ", count);
scanf_s("%s", &name, 15);
lengthN = strlen(name);
printf_s("\n%s\n%d", name,lengthN);

while (lengthN == NULL)
{
    printf_s("\nName too big; please enter a name within 15 
    characters!\n\n");
    scanf_s("Enter name: %s", &name, 15);
    lengthN = strlen(name);
}

3 个答案:

答案 0 :(得分:0)

lengthN不会等于NULL(至少在C中),因为strlen会返回一个include元素,这是一个数值。至少为了使你的代码更符合逻辑,你应该在你的while循环中测试lengthN是否等于0,然后要求用户输入一个名称,直到长度不等于0。

size_t

答案 1 :(得分:0)

根据scanf_s()的文件:

  

返回成功转换和分配的字段数;返回值不包括已读但未分配的字段。返回值0表示未分配任何字段。对于错误,返回值为EOF,或者在第一次尝试读取字符时遇到文件结束字符或字符串结尾字符。

您是否应该检查scanf_s()循环条件下while返回的值?

while (scanf_s("%s", &name, 15))
   ;

答案 2 :(得分:0)

预计{p> scanf_s("%s", &name, 15);不会使{<1}}填充零长度字符串@Michael Walz

它会消耗前导空白区域,直到输入一些非空白区域 - 保存在name中。 (文件结束和罕见输入错误是例外)。

name因此非零。

...... lengthN = strlen(name);总是假的。