C中不同的数据类型
Posted
技术标签:
【中文标题】C中不同的数据类型【英文标题】:data types different in C 【发布时间】:2020-08-04 18:17:13 【问题描述】:我们如何在 C 中声明并行数组。此外,如何在单个数组中添加多个数据类型。例如,我想在同一个数组中声明 int 和 char 数据类型
#include <stdio.h>
int main()
double linetotal= qty*price;
printf("line total =%lf\n",linetotal);
double subtotal = line total - discount ;
【问题讨论】:
这行不通:scanf("%s",&name);
因为name
只是一个字符。 scanf("%s",&name);
、scanf("%f",&quantity);
和 scanf("%f",&price);
的格式说明符类型也错误。
@FredLarson 但这对我有用...
不,只是看起来。这就是未定义行为的本质。它可以看起来像它在工作,但实际上你有一颗定时炸弹等着引爆。
您遇到或将会遇到的另一个问题是scanf
leaving newline characters in the buffer。
@FredLarson 是的,谢谢,我注意到了。我可以添加一个空格,以便 scanf 将忽略换行符,对吗?顺便说一句,你能帮我完成剩下的代码吗?
【参考方案1】:
现在检查解决方案。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NUM_CODE 10
const char *CODE[NUM_CODE] = "B100","B122","B134","B138","B145","B160","B165","B178","B186","B194";
double PRICE[NUM_CODE]=12.8,18.7,20.5,11.5,25.5,20.55,25.65,14.85,22.2,24.25;
int main()
char name[20];
printf("Enter buyer name: ");
scanf("%s",name);
int entry;
printf("Enter number of entries for the invoice: ");
scanf("%d",&entry);
char code[10];
int quantity;
double price,linetotal=0;
int i;
for(i=1;i<=entry;i++)
printf("Enter Code: ");
scanf("%s",code);
printf("Enter Quantity: ");
scanf("%d",&quantity);
printf("Enter Unit Price: ");
scanf("%lf",&price);
int j;
int flag=0;
for(j=1;j<=NUM_CODE;j++)
// how do i print values like B100 without getting errors//
printf("%s ",CODE[j-1]);
// how to match the user input with parallel arrays?//
if(strcmp(CODE[j-1],code)==0 && PRICE[j-1]==price)
//If correct code and price found do
printf("\nValid Code and price found\n");
//set the flag and break from the loop
flag=1;
break;
if(flag==0)
//Exit the program with invalid entry
printf("\nInvalid Code and price found\n");
printf("The program will close now...\n");
exit(1);
// how do calculate line total,and subtotal after discount//
// discount is 10% if line total is greater than Rs5000//
linetotal = price * quantity + linetotal;
printf("\n");
double subtotal;
if(linetotal>5000)
subtotal = 0.9*linetotal;
else if(linetotal>=1000 && linetotal<=5000)
subtotal = 0.95*linetotal;
else
subtotal = linetotal;
printf("Discount: %0.2lf%%\nTotal Price: %lf\n",((linetotal-subtotal)/linetotal)*100,subtotal);
return 0;
【讨论】:
行总计(客户购买的总和)和小计应使用数量和单价计算。如果小计大于 5000 卢比,那么他们将对小计提供 10% 的折扣。如果小计在 1000 美元到 5000 美元之间,那么他们会给小计 5% 的折扣。最后,发票应显示折扣金额,总价必须由客户支付。 好的,现在知道了。 哦,您可以使用 if-else 块进行错误检查。 @tiara 记住...如果这个答案对你有帮助 - 给它一个赞成票。如果这个答案解决了您的问题 - 接受它。 :-) “并行数组”几乎总是一种反模式。比 N 个并行数组更好的是一个struct
数组,其中结构具有 N 个属性。以上是关于C中不同的数据类型的主要内容,如果未能解决你的问题,请参考以下文章