而循环没有条件

时间:2016-07-31 04:43:40

标签: c while-loop conditional-statements

以下是我遇到的程序

#include <stdio.h>       

void sp_to_dash(const char *str);
int main(void)
{
    sp_to_dash("this is a test");
    return 0;
}
void sp_to_dash(const char *str)
{
    while(*str) //beginning of while loop
    {               
        if(*str== ' ')printf("%c", '-');
        else printf("%c", *str);
        str++;
    }
}

while循环开始时,我们可以看到while(*str)是在没有任何条件的情况下启动的,这意味着当*str应该停在null时没有提到或'\0'。代码工作正常,但据我说它应该是while(*str != null)while(*str != '\0')。请向我解释一下。

3 个答案:

答案 0 :(得分:1)

与写这个相同 -

while (*str != '\0')

'\0'的类型为int,等同于0,不会影响循环的执行。

注意 - 不要将字符串与==进行比较,也不要有运算符!==

如果您使用此功能(将char与字符串文字进行比较),这将导致错误 -

while (*str != "\0")  

答案 1 :(得分:1)

while循环需要一个值作为条件才能工作。当您插入while (*str == '3')之类的条件时,您的条件会检查*str实际上是'3',如果是,则会将其解释为1(您可以将其视为True,如果您(如果没有),它将其解释为0(或False)。

这就是您可以撰写while (0)while (1)

的原因

现在,您的条件是*str的值,因此,在条件检查期间,您将检查*str的值,以查看它是0还是(每隔一个值(-1,7,32333.34 ......)被视为True) strconst char *所以我们需要将char值转换为int值(使用ASCII)。值为0的char'\0'

答案 2 :(得分:0)

它与(* str!=&#39; \ 0&#39;)的条件完全相同,因为\ 0的ascii值为0所以当* str为\ 0时循环将停止,意味着在字符串的结尾,

*除0之外的任何其他值都是其自身的真实条件(如* str)并将导致while循环继续e,g:while(5){}将是无限循环。