如何利用'\n'字符终止get函数的文件读取操作
问题分析与解决
你的代码逻辑存在顺序错误,导致无法在读取到换行符时停止。原循环中crypt[j] != '\n'的判断发生在读取字符之前,此时crypt[j]是未初始化的随机值,而且即使读到换行符,也会先将其存入数组再执行j++,下一次循环判断的是下一个未读取的数组位置,自然无法终止循环。
修正方案
推荐采用先读取字符、再判断停止条件的写法,既避免未初始化值的干扰,又能精准在换行符处停止:
int j = 0; char ch; // 循环条件:数组还有空间(留1位存字符串结束符)、读取成功、未读到换行符 while (j < MAX_CHAR - 1 && InFile.get(ch) && ch != '\n') { crypt[j++] = ch; } // 给字符数组添加字符串结束符,避免后续操作出现乱码 crypt[j] = '\0';
方案说明
- 先通过
InFile.get(ch)读取字符,成功读取后再判断是否为换行符,逻辑更可靠 j < MAX_CHAR - 1确保数组不会越界,预留一位给'\0'(C风格字符串必须的结束标记)- 当读到换行符时,循环直接终止,不会将换行符存入数组(如果需要保留换行符,可调整逻辑:先存入再判断)
原代码问题拆解
原代码的执行流程是:
- 判断
j < MAX_CHAR、未到文件尾、crypt[j] != '\n'(此时crypt[j]未读取,值随机) - 读取字符到
crypt[j] j++
当读到换行符时,步骤2已经将换行符存入数组,步骤3让j自增,下一次循环判断的是crypt[j](新的未读取位置),因此无法触发停止条件。
内容的提问来源于stack exchange,提问作者lilcrack
相关产品推荐
相关产品推荐

