我是學習 C 的初學者。如果我有一個給定格式的檔案:
12 20 40 60 80
04 10 34 30 20
我怎樣才能用一個函式驗證它只是整數。
我正在處理一項要求我這樣做的任務。這就是為什么我不能包含我的 main 但我將一個檔案傳遞到我的函式中。
bool check(FILE *fp) {
int numArray[26];
int i = 0;
int num;
while(fscanf(fp, "%d", &num)) {
if (isdigit(num) == 0) {
fprintf(stderr, "Not correct format ");
return false;
} else
{
numArray[i] = num;
i ;
}
}
}
如果我給它不正確的格式,例如
12x 10 15 13 10
沒發生什么事。我想知道是否有人可以指出我正確的方向?
uj5u.com熱心網友回復:
fscanf將從輸入中的格式回傳成功識別的模式數;如果它看到與下一個格式模式不匹配的內容(例如模式的字母%d),它將拒絕它并回傳一個較小的數字。因此,在您的情況下,您只需查找fscanf回傳 0:
bool check(FILE *fp) {
int numArray[26];
int i = 0;
int num;
int matched;
while ((matched = fscanf(fp, "%d", &num)) != EOF) {
if (matched == 0) {
fprintf(stderr, "Not correct format\n");
return false;
} else if (i >= 26) {
fprintf(stderr, "Too many numbers\n");
return false;
} else
{
numArray[i] = num;
i ;
}
}
return true;
}
uj5u.com熱心網友回復:
int is_number(char *str)
{
int i = 0;
while (str[i] != '\0')
{
if (str[i] < '0' || str[i] > '9')
return 0;
i ;
}
return 1;
}
也許這個。所以你在看變數是否只有數字?
uj5u.com熱心網友回復:
好吧,也許這更好用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
FILE *fp;
char c;
char s[100];
int i = 0;
fp = fopen("test.txt", "r");
if(fp == NULL)
{
printf("Error opening file");
exit(1);
}
while((c = fgetc(fp)) != EOF)
{
if(isdigit(c) == 0)
{
printf("Not only integers\n");
break;
}
}
if(c == EOF)
printf("Only integers\n");
fclose(fp);
return 0;
}
但是是的,它幾乎是一樣的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366249.html
標籤:C
上一篇:為什么我的回圈以次優方式作業?
