2016-07-31 2 views
-1

Ниже приводится программа, которую я столкнулсяХотя цикл без условия

#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'). Пожалуйста, объясните это мне.

+0

Сказать, что код должен быть 'while (* str! = Null) {...}' четко указывает, что не имеет четкой разницы между пустыми строками, нулевыми указателями и символом 'NUL' ASCII' '\ 0'' (и BTW нулевой указатель равен 'NULL', а не' null'). Это заболевание, несколько распространенное среди новичков C, но вы должны это исправить как можно скорее. – 6502

ответ

0

Это то же условие, что и (* str! = '\ 0'), потому что значение ascii от \ 0 равно 0, поэтому цикл остановится, когда * str будет \ 0, значит, в конце строки ,

* любое другое значение, кроме 0, является истинным условием для себя (например, * str) и вызовет продолжение цикла while, g: while (5) {} будет бесконечным циклом.

1

Это так же, как это пишу -

while (*str != '\0') 

'\0' имеет тип Int и эквивалентна 0 и не будет влиять на выполнение цикла.

Примечание - Не сравнивайте строку с == и нет оператора !==.

Это вызовет ошибку, если вы используете это (сравнивая char с строкового литерала) -

while (*str != "\0") 
+1

Ther не является строкой в ​​коде, который сравнивается с оператором == –

+0

@ Dr.Haimovitz OP модифицировал свой код, это результат этого. Теперь он удалил '! ==' тоже. – ameyCU

+0

ОК извините ......... –

1

Петля в то время как требуется значение в качестве условия для работы. Когда вы вставляете условие типа while (*str == '3'), ваше условие проверяет, действительно ли *str - '3', и если да, то оно интерпретируется как 1 (вы можете думать об этом как об Истине, если хотите), а если нет, то он интерпретирует его как 0 (или False).

Вот почему вы можете написать while (0) или while (1).

Теперь, ваше состояние является значение *str так, во время проверки состояния, вы будете проверять значение *str, чтобы увидеть, если это 0 или не (каждое другое значение (-1, 7, 32333,34 ...), считающийся True)str - это const char *, поэтому нам нужно перевести значение char в значения int (используя ASCII). Значение char, которое имеет значение 0, равно '\0'.

Смежные вопросы