我写的代码基本上是一个关于要求用户输入名字的问题。如果名称为空白,即用户忘记输入名字,则代码会提到用户忘记输入名称,然后再次询问。它应该继续询问,直到满足条件。
// This sample compares user input to what is being typed. If the
// input is void of any charicters before pressing enter, it will print a reply.
#include <stdio.h>
#include <string.h>
int main()
{
char firstname[25];
printf("Please enter your first name:");
fgets(firstname,25,stdin);
// ask to enter in a name. If no name or text is present,
// will reply with no name entered
// and will loop untill a name is pressed and entered
do
{
printf("You pressed enter before entering your first name.\n Please enter first name");
}
while (firstname == NULL || strcmp(firstname,"")==0);
if(!strcmp(firstname, "firstname"))
{
printf("Thank you %s! for entering in your first name",firstname);
}
getchar();
}
它只循环一次。所以,不确定为什么它不会继续,并且打破循环说"thank you %s!
任何人都可以给出一个不同的例子,它确实有效,我可以更好地理解它吗?
答案 0 :(得分:1)
在do...while
循环中,您只有一个不会改变循环条件的printf语句。考虑在循环内移动行fgets(firstname,25,stdin)
。
答案 1 :(得分:0)
不是你遇到的问题,但这是你很快就会遇到的问题:
if(!strcmp(firstname, "firstname"))
如果字符串相等, strcmp
返回0,如果它们不同,则返回正值或负值。
这意味着如果您尝试将结果解释为布尔值,strcmp
会在字符串不同时返回true
,而false
则为{{1}} 相同。
您现在可以在引用行上看到问题吗?
答案 2 :(得分:0)