我一直在尝试验证输入文件。它有两个条件:
0
到7
的范围内-只能是整数。如果这两个条件均得到验证,我想打印出Valid
,如果没有,请在Invalid
上打印stderr
。该程序无法正常运行-我似乎从没获得Valid
输出。
FILE *r;
r = fopen("soubor.txt", "r");
if (r == NULL) {
fprintf(stderr, "File could not be opened\n");
} else {
int c;
bool alpha = false;
bool outOfRange = false;
while ((c = fgetc(r)) != EOF) {
if (isalpha(c) != 0) {
alpha = true;
break;
}
if (c < 0 || c > 7) {
outOfRange = true;
break;
}
}
if (alpha == false && outOfRange == false) {
printf("Valid\n");
}
if (alpha == true || outOfRange == true) {
fprintf(stderr, "Invalid");
}
fclose(r);
}
答案 0 :(得分:1)
您的问题说明不完全清楚:
10
之类的数字? 01
呢?根据您在注释中的精度,文件应仅包含空格和0
.. 7
范围内的非连续数字。
这是具有以下语义的修改版本:
#include <ctype.h>
#include <stdbool.h>
int main() {
FILE *r = fopen("soubor.txt", "r");
if (r == NULL) {
fprintf(stderr, "File could not be opened\n");
return 1;
}
bool valid = true;
bool last_is_digit = false;
int c;
while ((c = getc(r)) != EOF) {
if (isspace(c)) {
last_is_digit = false;
} else
if (!last_is_digit && c >= '0' && c <= '7') {
last_is_digit = true;
} else {
valid = false;
break;
}
}
if (valid) {
fprintf(stderr, "Valid\n");
} else {
fprintf(stderr, "Invalid\n");
}
fclose(r);
return 0;
}
答案 1 :(得分:0)
<table border="1px" width="100%">
<tr>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
</tr>
<tr>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
</tr>
<tr>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
<th onclick="changeColor(this)">1</th>
</tr>
</table>
用法类似(省略错误处理):
int isValid(const char *input)
{
while (*input++) {
if (isalpha((unsigned char) *input)) return 0;
if (isdigit((unsigned char) *input) && *input > '7') return 0;
}
return 1;
}