嵌套for / while循环和数组,过滤掉数组中的数字

时间:2014-02-12 02:06:57

标签: c arrays loops while-loop nested

int main(void) 
{
int i,j=0,k;                               //initialization
char equation[100];                          //input is a string (I think?)
int data[3];                                 //want only 3 numbers to be harvested

printf("Enter an equation: ");
fgets(equation, 100, stdin);               //not so sure about fgets()

for (i = 0; i < equation[100]+1; i++) {            //main loop which combs through
                                                   //"equation" array and attempts
                                                   //to find int values and store
    while (j <= 2) {                               //them in "data" array
        if (isdigit(equation[i])) {
            data[j] = equation[i]
            j++;
        }
    }
    if (j == 2) break;

}

for (k = 0; k <= 2; k++) {                    //this is just to print the results
    printf("%d\n", data[k]);
}

return 0;
}

您好!这是我在C中的入门课程的程序,我试图梳理一个数组,然后将数字分配给另一个数组,然后我可以访问和操作它。

然而,每当我运行这个时,我得到0 0 0作为我的“数据”数组中的三个元素。

我不确定我的逻辑或数组语法是否出错,因为我是数组新手。

提前致谢!!! :)

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题:

  1. for (i = 0; i < equation[100]+1; i++) {应该是

    size_t equ_len = strlen(equation);
    for (i = 0; i < equ_len; i++) {
    

    无论输入是什么,equation[100]的值都不确定,因为char equation[100];equation只有100个元素,最后一个是equation[99]

  2. equation[i] = data[j];应为

    data[j] = equation[i];
    

    我想您希望将数字存储在equationdata

  3. break;应该删除。

    break;语句将跳出while循环,结果是您将equation中的最后一位数存储到data[0](假设您已切换{{} 1}}和data,如#2中所述。

    如果您想要equation中的前三位数字,您应该执行类似

    的操作
    equation
  4. equ_len = strlen(equation); j = 0; for (i = 0; i < equ_len; i++) { if (j <= 2 && isdigit(equation[i])) { data[j] = equation[i]; j++; } if (j > 2) break; } 应为printf("%d\n", data[k]);

    printf("%c\n", data[k]);将提供%d的ASCII码,例如,如果data[k]的值为字符“1”,则data[k]将打印50(ASCII码'1'而不是1。


  5. 这是我的最终代码,基于OP代码:

    %d

    经过测试:

    #include <ctype.h>
    #include <string.h>
    #include <stdio.h>
    
    int main(void) 
    {
        int i,j,k;
        char equation[100];
        int data[3];
        int equ_len;
    
    
        printf("Enter an equation: ");
        fgets(equation, 100, stdin);
    
        equ_len = strlen(equation);
        j = 0;
        for (i = 0; i < equ_len; i++) {
            if (j <= 2 && isdigit(equation[i])) {
                data[j] = equation[i];
                j++;
            }
            if (j > 2) break;
        }
    
        for (k = 0; k <= 2; k++) {
            printf("%c\n", data[k]);
        }
    
        return 0;
    }