矩阵在C中的结构中工作吗?

时间:2016-08-16 17:27:55

标签: c matrix struct

我试图制作一个结构,其中包含(在此示例中)要在数组中购买的商品的名称,以及矩阵中的价格和我应该购买的重量。这只是我尝试做的一个简单的例子。 我使用strcpy声明这个值只是因为我这样学习它,如果它是最好的方法,我不会这样做。

#include<stdio.h>
#include<string.h>
typedef struct Grocery_list{

    char item_name[2];
    double item_info[2][2]; 

}Grocery;


int main(){

Grocery market;
strcpy( market.item_name[0], "Apple");
strcpy( market.item_name[1], "Sugar");
strcpy( market.item_info[0][0],200); //apple weight
strcpy( market.item_info[1][0], 3); //apple price
strcpy( market.item_info[0][1], 300);
strcpy( market.item_info[1][1], 4);

printf("%f \n",martket.item_info[1][1]);

return 0;}

错误是

teste.C: In function ‘int main()’:
teste.C:14:27: error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive]
 strcpy( market.item_name[0], "Apple");
                           ^
In file included from teste.C:2:0:
/usr/include/string.h:129:14: error:   initializing argument 1 of ‘char* strcpy(char*, const char*)’ [-fpermissive]
 extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
              ^
teste.C:15:27: error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive]
 strcpy( market.item_name[1], "Sugar");
                           ^
In file included from teste.C:2:0:
/usr/include/string.h:129:14: error:   initializing argument 1 of ‘char* strcpy(char*, const char*)’ [-fpermissive]
 extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
              ^
teste.C:16:35: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’
 strcpy( market.item_info[0][0],200);
                                   ^
teste.C:17:34: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’
 strcpy( market.item_info[1][0], 3);
                                  ^
teste.C:18:36: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’
 strcpy( market.item_info[0][1], 300);
                                    ^
teste.C:19:34: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’
 strcpy( market.item_info[1][1], 4);
                                  ^
teste.C:21:16: error: ‘martket’ was not declared in this scope
 printf("%f \n",martket.item_info[1][1]);
                ^

显然,我在Google上搜索了答案和解决方案,但我尝试的所有内容都引起了其他错误,甚至是同样的错误。对于我一般的编程新手,我不知道这些错误意味着什么。

提前谢谢

3 个答案:

答案 0 :(得分:0)

成员item_name是一个两个字符的数组,它不是一个字符串数组,它只是一个字符串(只能容纳一个字符,请记住所有字符串都有一个特殊的终结者角色)。您可能应该将此数组作为char数组,这意味着它是一个字符串数组:

char item_name[2][64];  // Two strings, each can hold 63 characters

成员item_info double 的数组数组。 strcpy函数用于复制字符串char的数组)。

请记住,数组中的每个元素都像一个变量,这意味着您可以只分配给它:

market.item_info[0][0] = 200; //apple weight
market.item_info[1][0] = 3; //apple price
market.item_info[0][1] = 300;
market.item_info[1][1] = 4;

最后一个错误是因为你拼写错误market

如果您只是读取错误消息,所有这一切对于初学者来说都是非常明显的。

答案 1 :(得分:0)

三个问题:

你的结构没有字符串数组。它有一个字符数组。您需要为item_name添加一个额外的维度才能拥有这样的数组:

typedef struct Grocery_list{

    char item_name[2][50];
    double item_info[2][2]; 

}Grocery;

此外,您正在使用strcpy尝试复制数值。此函数用于复制字符串。而不是使用此功能,执行一个简单的任务:

market.item_info[0][0] = 200; //apple weight
market.item_info[1][0] = 3; //apple price
market.item_info[0][1] = 300;
market.item_info[1][1] = 4;

最后,您的printf声明中有拼写错误:

printf("%f \n",martket.item_info[1][1]);

应该是:

printf("%f \n",market.item_info[1][1]);

答案 2 :(得分:0)

1 - 您对item_name [2]的声明是正确的,但您使用的方式错误。这实际上是逻辑错误。你需要足够的空间来保存你的数据,例如:apple,sugar和......字符串的最后一个字符是'\ 0'。事实上,你只是声明一个字符用于保存“苹果”或“糖”。

2 - strcpy用于操作字符串或字符数组,因此您无权将此函数用于数值变量。

3你在最后一行拼写错误(在返回操作系统之前)。