明白我的逻辑,而如果代码在C? 37行/空格的代码
问题描述:
我写的代码基本上是一个关于要求用户输入名字的问题。如果名字是空白的,即用户忘记输入名字,那么代码会提到用户忘记输入名字,然后再询问。它应该继续询问,直到满足条件。明白我的逻辑,而如果代码在C? 37行/空格的代码
// 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!
任何人都可以给一个不同的例子,所以它的工作,我可以更好地理解它?
答
在do...while
循环中,只有一个printf语句不会更改循环的条件。考虑在循环内移动线fgets(firstname,25,stdin)
。
答
不太您遇到的问题,但它是一个你很快会遇到:
if(!strcmp(firstname, "firstname"))
strcmp
返回0,如果字符串相等的,如果它们是不同的返回正值或负值。
这意味着,如果你尝试解释结果作为布尔值,strcmp
回报true
当琴弦不同和false
时候都相同。
你现在可以在引用的行上看到问题吗?
它已经搞砸了! :)正确使用语法过滤器 – 2011-01-10 21:35:39
保持缩进清晰!我已经写了近10年的代码,当你编写这样的代码时,我有一段不可能读的时间。如果一位经验丰富的程序员阅读这篇文章时遇到困难,那么是什么让你觉得你会更容易? – riwalk 2011-01-10 21:37:33