2016-11-23 57 views
-3

我得到一个错误,因为我需要把这个结构的返回值。如何获取用户输入的结构使用其他功能获取用户输入C99

struct Item enterItem(int sku) 
{ 
     char name; 

     printf("  SKU: %d", sku); 
     printf("  Name: "); scanf("%20[^\n]", &name); 
     clearKeyboard();      // Function call to remove'\n' 
     printf("  Price: "); 
     getDouble();       // Function call to get user input in double 
     printf(" Quantity: "); 
     getInt();       // Function call to get user input in int 
     printf("Minimum Qty: "); 
     getInt(); 
     printf(" Is taxed: "); 
     getYesOrNo();      // Function call to get user input in bool > (Y)es or (N)o 

} 
+1

请发表[最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)。你在哪里存储读取的值?也是'char名字; scanf(“%20 [^ \ n]”,&name);'是不好的,因为您只能输入零字符字符串(加上终止空字符)。 – MikeCAT

+0

您通常不应该按值传递/返回结构。传递指向它们的指针以避免复制 –

+0

那么,为什么你不返回一个结构,因为你知道你需要?声明该结构类型的局部变量,根据需要填充它并返回它或更好地修改函数接受一个指向调用者提供的结构的指针。 – kaylum

回答

0

您应该创建一个struture对象(数据)来返回并返回它。

你想可能是这样的内容:

struct Item 
{ 
     char name[21]; 
     double price; 
     int quantity; 
     int minimum_qty; 
     _Bool is_taxed; 
}; 

struct Item enterItem(int sku) 
{ 
     struct Item item; 

     printf("  SKU: %d", sku); 
     printf("  Name: "); scanf("%20[^\n]", item.name); 
     clearKeyboard();      // Function call to remove'\n' 
     printf("  Price: "); 
     item.price = getDouble();   // Function call to get user input in double 
     printf(" Quantity: "); 
     item.quantity = getInt();   // Function call to get user input in int 
     printf("Minimum Qty: "); 
     item.minimum_qty = getInt(); 
     printf(" Is taxed: "); 
     item.is_taxed = getYesOrNo();  // Function call to get user input in bool > (Y)es or (N)o 

     return item;  
}