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);
}
答案 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)
scanf_s("%s", &name, 15);
不会使{<1}}填充零长度字符串。 @Michael Walz
它会消耗前导空白区域,直到输入一些非空白区域 - 保存在name
中。 (文件结束和罕见输入错误是例外)。
name
因此非零。
...... lengthN = strlen(name);
总是假的。