You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环中cLetter变量未更新,无法正确输出字符及对应ASCII值

问题原因

你猜的没错,问题就是cLetter变量在循环里没更新。你把char cLetter = cWord[iCounter];写在了循环外面,这行代码只会在程序刚开始执行一次,把cWord[0](也就是字符'L')赋值给cLetter。之后循环里iCounter从0变到4,但cLetter的值再也没被重新设置过,所以每次打印的都是第一次存进去的'L'和它的ASCII码76。

修正方案

有两种简单的修复方式:

方式一:在循环内更新cLetter

把cLetter的赋值移到循环里面,每次循环都根据当前的iCounter取对应位置的字符:

#include <iostream>
#include <stdio.h>

using std::cout;

int main()
{
    char cWord[30] = {"Larissa"};
    int iCounter = 0;
    char cLetter; // 先声明,不初始化

    for (iCounter = 0; iCounter < 5; iCounter++) {
        cLetter = cWord[iCounter]; // 每次循环更新字符
        printf("%c == %d \n", cLetter, cLetter);
    }
}

方式二:直接使用数组元素

甚至可以不用cLetter变量,直接在printf里用cWord[iCounter],这样更简洁:

#include <iostream>
#include <stdio.h>

using std::cout;

int main()
{
    char cWord[30] = {"Larissa"};
    int iCounter = 0;

    for (iCounter = 0; iCounter < 5; iCounter++) {
        printf("%c == %d \n", cWord[iCounter], cWord[iCounter]);
    }
}

另外,如果你想遍历整个单词(而不是固定前5个字符),可以改成循环到字符串结束符'\0',这样不管单词多长都能处理:

#include <iostream>
#include <stdio.h>

using std::cout;

int main()
{
    char cWord[30] = {"Larissa"};
    int iCounter = 0;

    while (cWord[iCounter] != '\0') { // 直到遇到字符串结束符
        printf("%c == %d \n", cWord[iCounter], cWord[iCounter]);
        iCounter++;
    }
}

内容的提问来源于stack exchange,提问作者Elizabeth Middleford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:25:14