C语言字符串反转代码疑问:for循环为何用i>=0而非i=0?
代码示例
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char userInput[256]; printf("Please enter string to be reversed: "); scanf("%s", userInput); int length = strlen(userInput); for (int i = length-1; i >= 0; i--) { printf("%c", userInput[i]); } return 0; }
提问(英文翻译)
Hello everyone, I'm trying to understand part of the logic in this C language string reversal code (I know there are more efficient implementations). I'd like to ask: Why does the for loop in this code have to use i >= 0 as the loop condition instead of i = 0?
解答
首先得明确:你提到的i = 0大概率是笔误——如果是赋值操作,完全没法正常工作;就算是想写比较操作i == 0,也达不到反转字符串的目的,具体原因如下:
如果是
i = 0(赋值操作):
在C语言的条件判断里,赋值表达式的结果就是被赋予的值(这里是0),而0代表逻辑“假”。这意味着循环一开始就会直接终止,连一次输出都不会执行,根本完成不了字符串反转。如果是笔误写成
i == 0(比较操作):
C语言里字符串的索引是从0开始的,比如长度为n的字符串,字符的索引范围是0到n-1。原循环从length-1(最后一个字符的位置)开始,每次i--,要遍历所有字符直到索引0。如果改成i == 0,循环只会在i等于0时执行一次,也就是只输出原字符串的第一个字符,剩下的字符都不会被打印,完全达不到反转整个字符串的效果。
而i >= 0的条件,能确保循环从最后一个字符开始,依次遍历到第一个字符(索引0),把每一个字符都输出一遍,这样才能完整实现字符串反转的功能。
内容的提问来源于stack exchange,提问作者cluelessCoder

