C言語 数値かどうかのチェック

/*
 ・1桁から9桁までの数字を文字列で入力し、各桁の数値チェック行う。
 ・先頭1文字目に'+'または'-'の符号の入力もOKとし、符号は桁数には数えない。
 ・エラーがない場合は、文字列を数値に変換する。
 ・処理は繰り返し行えることとし、文字列入力終了(EOF)のときに処理終了とする。




 */
#include <stdio.h>
#include <string.h>

int main(void) {
	char data[255];
	int i, n = 0, nsign = 1, flag = 0;
	//printf("%d", '0');
	printf("入力した文字列が数値のみの時はその値を返します。文字が含まれている場合はエラーを表示します。\n");
	printf("9桁以内の数値を入力してください。>>\n");
	while (scanf("%s", data) != EOF) {
		if (strlen(data) > 9) {
			flag = 2;
		}
		i = 0;
		if (flag == 0 && data[0] == '+') {
			i++;
		}
		if (flag == 0 && data[0] == '-') {
			nsign = -1;
			i++;
		}
		for (; i < strlen(data); i++) {
			if (flag == 0 && data[i] >= 48 && data[i] <= 57) {
				n = n * 10 + data[i] - '0';
			} else {
				if (flag == 2) {
					printf("桁が大きすぎます。再入力>>\n");
					break;
				} else {
					printf("エラー。文字が含まれています\n");
					flag = 1;
					break;
				}
			}
		}
		n = nsign * n;
		if (flag == 0) {
			printf("成功\n%d\n", n);
		}
		n = 0;
		flag = 0;
		nsign = 1;
	}
}