为什么在c编程中条件为假时循环条件内的语句会执行?

why does the statements inside loop condition execute when condition is false in c programming?

我只是运行一段代码,用于查找用户在C 编程语言中输入的给定字符串的长度。我使用循环条件来确定长度,但是当条件为假时,循环内的语句也会执行。我在 c 中尝试过的代码是:

#include <stdio.h>
#define ArrayLength 50

int StringLengthCount();

int main() {
    printf("Hello, World!\n");
    
    /*Question: Find inserted string's length, without build in function*/
    int c=StringLengthCount();
    printf("Your inserted string's length is:%d",c);


    return 0;
}

int StringLengthCount(){
    
    printf("\n");
    printf("Please enter a sentence to find its length of character:");
    char array1[ArrayLength];
    fgets(array1,ArrayLength,stdin);
    printf("Your inserted string is:%s\n",array1);

    int i=0;
    int count=0;
    while(array1[i]!='[=10=]'){
        count++;
        printf("%d character is %c",count,array1[i]);
        printf("\n");
        i++;
    }

    printf("\n");
    printf("Your inserted string's total character i.e string length is:%d",count);
}

我期待示例字符串输入“we”的结果 2,但它给出了结果 3。 CLion编译器的输出结果如下 enter image description here

你能告诉我为什么会这样吗?

函数fgets也将读取换行符,因此您需要将while循环中的条件从str[i] != '[=12=]'更改为str[i] != '\n'。我还实施了 Devolus.

建议的更改
#include <stdio.h>
#include <stdlib.h>

#define LEN 50

void string_length();

int main(void)
{
    string_length();
    return EXIT_SUCCESS;
}

void string_length(void)
{
    printf("Enter a string: ");
    char str[LEN];
    fgets(str, LEN - 1, stdin);
    printf("Your entered string is: %s\n", str);

    int i = 0;
    while (str[i] != '\n') {
        printf("The %d. character is '%c'.\n", i + 1, str[i]);
        ++i;
    }

    printf("\nThe string's length is %d.\n", i);
}

如果通过“条件为假时循环内的语句也执行”你的意思是你每次执行时都会看到一个额外的字符记住你使用的换行符(LF别名\n)字符输入您的字符串是获取字符串的一部分。

所以即使是空字符串也有一个字符是\n0x10.

您的支票应该是这样的:

while (array1[len] != '[=10=]' && array1[len] != '\n' )

你的功能,正如评论中所建议的那样,应该有一个 return 并且可以像这样只使用一个变量:

int StringLengthCount() {

  printf("\n");
  printf("Please enter a sentence to find its length of character:");
  char array1[ArrayLength];
  fgets(array1, ArrayLength, stdin);
  printf("Your inserted string is:%s\n", array1);

  int len = 0;
  while (array1[len] != '[=11=]' && array1[len] != '\n' ) {
    printf("%d character is %c", len + 1, array1[len]);
    printf("\n");
    len++;
  }

  printf("\n");
  printf("Your inserted string's total character i.e string length is:%d\n\n",
         len);

  return len;
}