用getchar读取字符,回车后没有反应
调试时在这句出问题:while(((concept[j]=getchar()) != '\0' && 'P' || 'U' || 'I') || getchar() != '=');是UVAOJ上面的537题,原题:
Description
物理老师提问,根据 P = IU 这个公式计算并回答。
提问会告诉你公式中的任意两个元素的值,求出第三个元素的值。
因此,提问语句中含有两个 DataField,DataField的格式如下:
DataField ::= Concept '=' RealNumber [Prefix] Unit
Concept ::= 'P' | 'U' | 'I'
Prefix ::= 'm' | 'k' | 'M'
Unit ::= 'W' | 'V' | 'A'
其中,Prefix可为 m (milli) 、k (kilo) 或 M (Mega) 。
并且题目的输入保证如下三点:
“=”在提问语句里,只出现在DataField中。
DataField中不出现多余空格。
题目保证三个元素中有且只有给出两个元素的值。
输入例子为:
3
If the voltage is U=200V and the current is I=4.5A, which power is generated?
A light-bulb yields P=100W and the voltage is U=220V. Compute the current, please.
bla bla bla lightning strike I=2A bla bla bla P=2.5MW bla bla voltage?
输出例子:
Problem #1
P=900.00W
Problem #2
I=0.45A
Problem #3
U=1250000.00V
我写的源程序为
#include<stdio.h>
int main(void)
{
int k,i,j;
char concept[2],prefix[2],answer1[3],t1;
double data[2],answer2,t2;
scanf("%d",&k);
getchar();
for(i = 0;i < k;i ++)
{
for(j = 0;j < 2;j ++)
{
while(((concept[j]=getchar()) != '\0' && 'P' || 'U' || 'I') || getchar() != '=');
scanf("%d",&data[j]);
if((prefix[j]=getchar()) == 'V' || 'A' || 'W')
prefix[j] = 0;
switch(prefix[j])
{
case 'm':data[j] = data[j]/1000;break;
case 'M':data[j] = data[j]*1000000;break;
case 'k':data[j] = data[j]*1000;break;
}
}
if(concept[1] == 'P')
{
t1 = concept[1];
concept[1] = concept[0];
concept[0] = t1;
t2 = data[1];
data[1] = data[0];
data[0] = t2;
}
answer1[0] = 238-concept[0]-concept[1];
answer1[1] = '=';
switch(answer1[0])
{
case 'P':answer2 = data[0]*data[1];answer1[2] = 'W';break;
case 'U':answer2 = data[0]/data[1];answer1[2] = 'V';break;
case 'I':answer2 = data[0]/data[1];answer1[2] = 'A';break;
}
printf("Problem #%d\n",i+1);
printf("%c%c%lf%c\n\n",answer1[0],answer1[1],answer2,answer1[2]);
while(getchar() != '\n');
}
return 0;
}
不需要重新写一个新的,就是想知道我自己写的这里出了什么问题,
不过,当然了,如果有一个用C语言重新写的我看看也行。