0

我正在使用 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
4

2 回答 2

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;
    }
}
于 2013-04-09T20:37:46.210 回答
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;
}
于 2013-04-09T20:39:05.573 回答