c - 为什么在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 编译器中的输出结果在 此处输入图像描述
你能告诉我为什么会这样吗?
解决方案
该函数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);
}
推荐阅读
- sql - 将行转置为 Oracle Sql 中的列
- c - 在无限循环中运行 C
- python - NumPy - 使用权重向量化二维数组列上的 bincount
- tensorflow - tf.keras model.fit():相同数据上的 train loss 和 val loss 之间的巨大差异
- php - Instagram Story Scraper PHP
- oracle - Oracle - 如何正确调用布尔函数
- scala - 如何将镶木地板文件转换为 libsvm 格式?
- javascript - 如何使用 webpack 从外部文件加载 AMD 模块
- csv - 写入和读取 csv 文件 (Java)
- c++ - A类的定义需要B类的定义,如何在不暴露B定义的情况下暴露A的公共函数?