c - 带有简单计数器的循环发生故障?

标签 c string loops if-statement for-loop

我有一个程序,它接受一个字符数组并调用函数convert。该函数确定字符是字母还是数字。该程序应该输出它在字符串中找到的第一个字母。以及它在字符串中找到的第一个数字。我的循环在发现字母不起作用后停止寻找字母。

有什么想法吗? 代码是使用 Borland 编译器用 C 语言编写的。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

int convert (char array[],char **);

int main()
{
    int intval; 
    char array[512], *charptr;

    printf("Input a string that starts with a series of decimal digits:\n>");
    while ( gets( array ) != NULL ){
        intval = convert(array, &charptr );
        printf ("Intval contains %d, Charptr contains '%s'\n", intval, charptr);
    }
    system("pause");

    return 0;


}
int convert (char array[],char ** charptr)
{
    int i, x, c = 0;
    char b[512];
    for (i=0;i<strlen(array);i++){

        if (isalpha(array[i]))
        {
            if(c >= 1){ 
                *charptr = &array[i];
                c++;
                }
            else 
                break;


        }
        else if ( isdigit(array[i]))
                x = 10*x + array[i] - '0';

     }

    return  x;
}

更新:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>


int convert (char array[],char ** charptr);



int main()
{
    int intval; 
    char array[512], *charptr;

    printf("Input a string that starts with a series of decimal digits:\n>");
    while ( gets( array ) != NULL ){
        intval = convert(array, &charptr );
        printf ("Intval contains %d, Charptr contains '%s'\n", intval, charptr);
    }
    system("pause");

    return 0;


}
int convert (char array[],char ** charptr)
{
    int i, x, c;
    char b[512];
   for (i=0;array[i] != 0;i++){
        if ( isdigit(array[i]))

                x = 10*x + array[i] - '0';
        else if (isalpha(array[i]))
        {
            c++;
            if(c >= 1){ 
                *charptr = &array[i];

            }  
        }

    }

    return  x;
}

最佳答案

你有一个逻辑错误。 c初始化为0 。有一行要递增 c但它位于 if 内阻止这永远不会是真的。

        if(c >= 1){ 
            *charptr = &array[i];
            c++;
            }

第二十二条军规???

也许您想使用:

int convert (char array[],char ** charptr)
{
    int i, x, c = 0;
    char b[512];
    for (i=0;i<strlen(array);i++){

        if (isalpha(array[i]))
        {
                // No need for checking the value of c
                // return as soon you find an alphabet.
                *charptr = &array[i];
                break;    
        }
        else if ( isdigit(array[i]))
                // If you are looking for an alphabet only,
                // why do you have this block of code???
                x = 10*x + array[i] - '0';
    }

    return  x;
}

更新

也许,这就是您正在寻找的。

int convert (char array[], char ** charptr)
{
   size_t i;
   int x = 0;
   size_t len = strlen(array);

   // Set charptr to NULL in case there are no letters in the input.
   *charptr = NULL;
   for (i=0;i<len;i++){

      if ( isalpha(array[i]))
      {
         *charptr = &array[i];
         return x;
      }
      else if ( isdigit(array[i]))
      {
         x = 10*x + array[i] - '0';
      }
   }

   return x;
}

关于c - 带有简单计数器的循环发生故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239172/

相关文章:

c - 求和中每个单独项的除法公式

c - fscanf 函数在预期为 9 时返回 -1

loops - 在 Spark View 引擎中增加变量值

php - 将多条记录输入mysql数据库

java - 循环结构,很困惑

c - 为什么这里不建议使用 free(ptr) 方法?

c - 二分查找输出错误

C 字符串、指针、Put

python - 如何对字符串列表进行排序?

c# - 将具有十六进制值的字符串转换为字节数组