如何检查输入文件中是否包含字母或特定数字?

时间:2019-12-07 17:40:26

标签: c file validation

我一直在尝试验证输入文件。它有两个条件:

  1. 它不能包含字母
  2. 文件中的数字必须在07的范围内-只能是整数。

如果这两个条件均得到验证,我想打印出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);
    }

2 个答案:

答案 0 :(得分:1)

您的问题说明不完全清楚:

  • 当您在文件中写入数字时,数字必须在0到7的范围内-只能是整数。是指数字还是诸如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;
}