【发布时间】:2018-07-12 14:31:55
【问题描述】:
我正在尝试检查 ASCII 文件中是否出现不可打印字符(不包括 ASCII 代码 10 或 13)。总体思路是该程序检查输入的文件以确保其符合格式要求,其中之一是仅使用可打印的 ASCII 字符。目前我的代码看起来像这样:
FILE *input_check;
int current_line = 1;
int current_char;
/* opens a new file stream*/
input_check = fopen(filename, "r");
/* Gets the first character*/
current_char = fgetc(input_check);
while (current_char != EOF) {
if (current_char == 10 || current_char == 13) ++current_line;
if (current_char < 32 && current_char != 10 && current_char != 13) {
printf("Found non-printable character with ASCII code %d on line %d
\n", current_char, current_line);
}
current_char = fgetc(input_check);
}
fclose(input_check);
我尝试将制表符放入 ASCII 文件中以捕获它们,但输入流将它们视为空格,并将任何连续的空格视为一个字符。有没有办法确保每个字符都输入其原始 ASCII 码?
【问题讨论】:
-
在我看来,问题在于您将字符“放入”文件而不是代码中的方式。
-
C 有
isprint(current_char)功能。fgetc有声明int fgetc(FILE *stream);,没有第二个参数。 -
不要忘记 ASCII 127 是不可打印的字符(删除)。虽然使用数值比较没有任何问题,但不要使用幻数,而是使用字符本身,例如
if (current_char < ' ' && current_char != '\r' ...比 32、10、13 更具可读性(这听起来更像是足球而不是编码)标题ctype.h使字符分类更容易:) -
不要使用编程编辑器,它会将 Tab 键转换为空格。
-
什么是
fgetc(input_check,"%1c")?