【发布时间】:2017-10-25 13:50:50
【问题描述】:
我正在构建一个 C 程序,它获取一个 .txt 文件作为参数。 .txt 里面有几行整数,它们之间有一个空格,像这样:
1 2 3 4
5 6 7 8
...
我应该知道,如果一个非整数字符出现在 .txt 文件中,像这样:
1 2 a 4
...
由于 C 中没有 instanceof 运算符,我使用一个包含 0-9 数字的数组,并检查 .txt 文件中的每个字符,它是空格还是整数。如果两者都不是,则程序应该退出。 如果文件中没有问题,程序会计算一个中值并将该行打印到标准输出。 这是我的代码:
#include <stdio.h>
#include <ctype.h>
int arrayContains(char value);
int main(int argc, char **argv) {
const int LINESIZE = 255;
if (argc != 2) {
printf("wrong args!");
return -1;
}
char *command1 = argv[1];
FILE *handle = fopen(command1, "r");
if (!handle) {
printf("file not found!");
return -1;
}
int count = 0;
int sum = 0;
int median;
char string[LINESIZE];
while (fgets(string, LINESIZE, handle) != NULL) {
for (int i = 0; i <= sizeof(string) / sizeof(string[0]) - 1; i++) {
printf("%c", string[i]);
if (string[i] == ' ') {
i++;
}
else if (arrayContains(string[i]) == 0) {
count++;
sum += (int)string[i];
}
else {
printf("non-integer-character found!\n");
return -1;
}
}
median = sum / count;
printf("%s\n", string);
printf("%d\n", median);
}
}
int arrayContains(char value) {
const char numbers[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
for (int i = 0; i <= 9; i++) {
if (numbers[i] == value) {
return 0;
}
}
return -1;
}
现在程序的输出始终是 txt 文件的第一个数字,紧随其后的是:“找到非整数字符!”。 这告诉我,gets() 中的字符串元素与 arrayContains() 函数内的常量“数字”数组中的元素之间的比较,将始终导致 arrayContains() 函数返回 -1。 我做错了什么?
【问题讨论】:
-
i <= sizeof(string) / sizeof(string[0]) - 1;-->string[i]; -
不相关,但没有“非整数字符”,但有“非数字字符”。