【发布时间】:2021-09-15 22:20:54
【问题描述】:
我想编写一个算法,它接受一个输入,其中包含某个项目的名称及其价格,以及它们之间的破折号。输出应该说明物品的名称及其价格。 我也想知道如何将输入分成两个字符串,一个是名称,另一个是价格,因为我真的想不出任何东西。
int getprice(char item[]);
void printitem(char item[]);
int main()
{
char item[40];
int i, j, len;
int price = 0;
fgets(item, 40, stdin);
price = getprice(item);
printitem(item);
return 0;
}
int getprice(char item[])
{
int i = 0;
int price = 0;
int len = strlen(item);
int temp;
for (i = 0; i < len; i++)
{
if ((item[i] >= '0') && (item[i] <= '9'))
{
break;
}
i++;
}
for (i; i < len; i++)
{
temp = item[i] - '0';
price = price * 10;
price = price + temp;
}
printf("price is: %u\n", price);
return price;
}
void printitem(char item[])
{
int i = 0;
int len = strlen(item);
for (i = 0; i < len; i++)
{
if (item[i] != '-')
{
printf("%c", item[i]);
}
else // if '-' is encountered the next char is checked if it stops or if it needs to keep going
{
i++; //the for loop increments by itself
if (item[i] == ' ') //if there is a space after '-' that means we printed the whole thing
{
break;
}
i--; //if it needs to keep going
printf("-");
}
}
}
Input:Chocolate-Chip Cookie - 30
Output:Item: Chocolate-Chip Cookie
Price: 30
actual Output: Item: Chocolate-Chip Cookie
Price: 262
为什么输出价格不对,有没有更好的方法?
【问题讨论】:
-
阅读 strtok()
-
第 1 步:启用所有编译器警告以节省时间。 2)
temp = item[i] - '0';转换非数字。提示:输入为"Chocolate-Chip Cookie - 30\n"。 -
提示:“为什么输出价格错误”信息量不足。最好发布输入、真实输出和预期输出。
-
fgets()和sscanf()是一个不错的选择。否则,fgets()和strtok(),(或使用strcspn())——或者只使用一对指针和strchr()以及memcpy()。 -
感谢您是否可以正确缩进代码。更难阅读。谢谢