使用isdigit后如何将字符串打印到数组中?

时间:2018-09-03 17:52:10

标签: c

我对isdigit和字符串很陌生。我真的需要你们的帮助。我想将字符串打印到'food [f]'数组中。但是你们可以帮我检查我的问题在哪里吗?这是我的代码。

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

int main()
{
    char foo[20];
    float price;
    int number=1;
    int f=0,i=0;
    char *food[f];

adding_food :    

    food[f] = (char*)malloc(25);

    printf("Adding food into Menu (0 to Main Menu): ");
    scanf("%s", foo);
    {
        if(isdigit(foo[0])== 0)
        {
            foo[i] = *food[f]; //something wrong here 

            printf("Enter price (RM) : ");
            scanf("%f",&price);

            printf("\n%-16d%-19s%6.2f\n\n",number,foo,price);
            printf("\n%-16d%-19s%6.2f\n\n",number,food[f],price);

            number++;
            i++;
            f++;

            goto adding_food;
        }
        else 
            return 0;
    }
}

我希望我的输出是这样

  

在菜单中添加食物(0至主菜单):蛋糕

     

输入价格(RM): 10

     

1 蛋糕 10 // foo [0]

     

1 蛋糕 10 //食物[0]

1 个答案:

答案 0 :(得分:0)

您的代码中有几个错误。示例:

char *food[f];

类似于

char *food[0];

因为f为零。那没有道理。

使用goto也不被认为是好的样式。

因此,让我向您展示另一种方法。像这样:

// Make a type that can hold both a name and a price
struct item  
{
    char name[25];
    float price;
};

#define MAX_ITEMS 100

struct item* addItems(int* n)
{
    *n = 0;
    struct item* items = malloc(MAX_ITEMS * sizeof *items);
    if (items == NULL) return NULL;

    while (*n != MAX_ITEMS)
    {
         scanf("%24s", items[*n].name);
         if (items[*n].name[0] == '0') break;

         scanf("%f", &items[*n].price);

         *n += 1;
    }
    return items;
}

void print_all(struct item* my_items, int num_items)
{
    for (int i = 0; i < num_items; ++i)
        printf("%s %f\n", my_items[i].name, my_items[i].price);
}

int main()
{
    int num_items;
    struct item* my_items = addItems(&num_items);
    print_all(my_items, num_items);
    free(my_items);
}