我很生,我写了很多基础程序。我的新计划程序有问题。我想要计算总公园食谱,并在车上用车号和小时写在屏幕上。此序列必须是Car Hours Charge。 在我的程序中,只有scanf()向用户询问小时。用户写小时并输入,程序获得新行。我想这样出来
Car Hours Charge
1 5 3.00
但程序输出就像
Car Hours Charge
1 5
3.00
这是我的程序源代码:
#include<stdio.h>
double calculateCharges ( double time1 );
int main( void )
{ //open main
double time;
int i;
double TotalCharges=0, TotalTime=0;
printf("Car\tHours\tCharge\t\n");
for(i=1;i<=3;i++) //there is 3 cars checkin
{ //open for
printf("%d\t",i);
scanf("%lf", &time);
printf("\t");
TotalTime+=time;
printf("%lf",calculateCharges(time) ); // fonks calculate
TotalCharges+=calculateCharges(time); // for total charge
puts("");
} // end for
} // end main
double calculateCharges ( double time1 )
{ //open fonk
double totalC=0;
if( time1<=3) // untill 3 hours, for 2 dolars
{ //open if
totalC+=2.00;
} //end if
else if(time1>3) // after 3 hours, each hours cost 0.5 dolars
{ //open else if
totalC+=2+(time1-3)*0.5;
} //end else if
return totalC;
} // end fonk
答案 0 :(得分:3)
据我所知,这是与终端相关的“问题”。当您在终端中输入内容时,输入不会发送到程序,直到您按Enter键并输入将添加新行。
您需要做的是更改终端行为,以便您键入的所有内容立即发送到该程序。
看看这个问题,最佳答案将告诉你如何做你想做的事:How to avoid press enter with any getchar()
答案 1 :(得分:2)
标准C输入功能仅在您按下&#34;输入&#34;时开始处理输入。键。同时,您按下的每个键都会在键盘缓冲区中添加一个字符。
所以基本上当你使用scanf函数时,它不会读取缓冲区,直到&#34;输入&#34;钥匙被按下了。
有一些解决方法可以通过它,但不能使用标准C库。
干杯!
编辑: 下面的代码不遵循标准C库。但是,它可以满足您的要求:)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double calculateCharges ( double time1 );
int main( void )
{ //open main
double time;
int i,j = 0;
double TotalCharges=0, TotalTime=0;
char chTime[10];
printf("Car\tHours\tCharge\t\n");
for(i=1;i<=3;i++) //there is 3 cars checkin
{ //open for
printf("%d\t",i);
// Input the time
j = 0;
memset(chTime, '\0', 10);
while ( 1 )
{
chTime[j] = getch();
// User pressed "Enter"?
if ( chTime[j] == 0x0d )
{
chTime[j] = '\0';
break;
}
printf("%d", atoi(&chTime[j]));
j++;
}
// Convert to the correct type
time = atoi(&chTime[0]);
TotalTime+=time;
printf("\t%lf",calculateCharges(time) ); // fonks calculate
TotalCharges+=calculateCharges(time); // for total charge
puts("");
} // end for
} // end main
double calculateCharges ( double time1 )
{ //open fonk
double totalC=0;
if( time1<=3) // untill 3 hours, for 2 dolars
{ //open if
totalC+=2.00;
} //end if
else if(time1>3) // after 3 hours, each hours cost 0.5 dolars
{ //open else if
totalC+=2+(time1-3)*0.5;
} //end else if
return totalC;
} // end fonk