首页 > 解决方案 > 为什么在c编程中条件为假时循环条件内的语句会执行?

问题描述

我只是在运行一个代码来查找用户在 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]!='\0'){
        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 编译器中的输出结果在 此处输入图像描述

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

标签: cloopsnull

解决方案


该函数fgets还将读取换行符,因此您需要将 while 循环中的条件从 更改str[i] != '\0'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);
}

推荐阅读