나는 자동차 구입을 시뮬레이트하는 프로그램을 작성하고 있습니다. 이 프로그램은 처음에는 제대로 작동하지만 구매가 완료되고 프롬프트에 이름을 묻는 메시지가 표시되면 gets()
은 입력을 검색하지 않습니다. 여기 내 코드가있다.gets(); 함수가 C에서 두 번째 루프의 입력을 기다리지 않습니다.
#include <stdio.h>
int i;
int j=1;
int prices[5] = { 24000,28000,25000,20000,120000 };
int invent[5] = { 5,2,3,8,2 };
int purchased[5] = { 0, 0, 0, 0, 0 };
int main()
{
char name[50];
printf("Welcome to Buy-a-Car!\nPlease enter your name:\n");
gets(name);
printf("Welcome, %s. Here is our available inventory.\n", name);
sale();
return 0;
}
void sale()
{
while (i>0, j != 0) {
printf("1. Toyota Camry %d %d\n2. Honda CRV %d %d\n3. Honda Accord %d %d\n4. Hyundai Elantra %d %d\n5. Audi R8 %d %d", invent[0], prices[0], invent[1], prices[1], invent[2], prices[2], invent[3], prices[3], invent[4], prices[4]);
printf("\nWhich car would you like to purchase?\n");
scanf("%d", &i);
i = i - 1;
printf("How many would you like to purchase?\n(Note: To checkout, please press 0.)\n");
scanf("%d", &j);
if (j > invent[i])
printf("I'm sorry, that number is insufficient. Please try again.\n");
else
invent[i] = invent[i] - j;
purchased[i] = j;
}
checkout();
}
void checkout()
{
printf("Review of transaction:\n1. Toyota Camry %d %d\n2. Honda CRV %d %d\n3. Honda Accord %d %d\n4. Hyundai Elantra %d %d\n5. Audi R8 %d %d", purchased[0], prices[0], purchased[1], prices[1], purchased[2], prices[2], purchased[3], prices[3], purchased[4], prices[4]);
int total;
for (i = 0; i < 5; i++)
{
total = total + (purchased[i] * prices[i]);
}
printf("\n\nTotal: %d\n\n\n", total);
j = 1;
int purchased[5] = { 0, 0, 0, 0, 0 };
main();
}
사용중인 운영 체제는 무엇입니까? 또한'gets()'함수는 본질적으로 안전하지 않기 때문에 오래 전에 사용되지 않았다는 점을 지적하고자합니다. 아마'scanf()'또는'gets_s()'와 교환해야한다. – paulotorrens
Windows 10. _s 함수를 인식하지 못하는 온라인 컴파일러를 사용하고 있습니다. 데이터 손실 우려가 없으면 scanf를 사용합니다 (예 : 고객이 성과 이름을 입력하면 scanf는 첫 번째로만 읽음). –
프로그램이 어떻게 종료되어야합니까? – jwdonahue