循环中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
相关产品推荐
相关产品推荐

