c语言getchar不用回车得到字符,用getchar读取字符,回车后没有反应

已结贴√

问题点数:10 回复次数:7

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

用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

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语言重新写的我看看也行。

搜索更多相关主题的帖子:

元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值