我使用isalpha()来确定该行上是否有字符,并显示“90 1 0”行包含字母字符。
以下是相关代码
bool digitTest(char *test, int arysize)
{
int i;
for (i =0; i<arysize; i++)
{
if ((isalpha(test[i])) != 0){
return 0;
}
if (i==arysize)
return 1;
i++;
}
return 1;
}
在这里被称为
char buffer[4096] = {};
while(NULL!=fgets(buffer, sizeof(buffer), fp)){
if (digitTest(buffer, 4096) == 0){
printf ("contains alpha\n");
continue;
/*printing code if there is no alphabetic characters below, i do not believe it is relevant*/
这是输出
1
1
1
contains alpha
contains alpha
contains alpha
25123.90
54321.23
6
并输入
1
1
1
89 23.5 not a number
90 1 0
-5.25 not a number 10000
25123.90 54321.23 6
答案 0 :(得分:4)
代码有一些问题:
您不应该检查所有缓冲区。检查缓冲区直到\0
。因为fgets
的输出是C风格的字符串。
第二个问题是函数i++
中的额外digitTest
。你应该删除它。
您不再需要arysize
。
使用此digitTest
功能
int digitTest(char *test)
{
int i;
for (i=0; test[i] && test[i] != '\n'; i++)
{
if (isalpha(test[i]) != 0)
return 0;
}
return 1;
}
(可能有小错误,我没有测试过)
并称之为:
while( fgets(buffer, sizeof(buffer), fp) ) {
if (!digitTest(buffer)) {
printf ("contains alpha\n");
continue;
}
}
答案 1 :(得分:3)
看起来您可能正在访问内存中包含字符的位置,将代码更改为
char buffer[4096] = {};
memset(buffer, 0, 4096);
while(NULL!=fgets(buffer, sizeof(buffer), fp)){
if (digitTest(buffer, strlen(buffer)) == 0){ //get actual length of buffer
printf ("contains alpha\n");
continue;
修改强>
为了使您的代码无法响应\n
或\r
执行
bool digitTest(char *test, int arysize)
{
int i;
for (i =0; i<arysize; i++)
{
if( test[i] == '\r' || test[i] == '\n')
return 1;
if ((isalpha(test[i])) != 0){
return 0;
}
if (i==arysize)
return 1;
}
return 1;
}