| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 705 人关注过本帖
标题:用getchar读取字符,回车后没有反应
取消只看楼主 加入收藏
SLmask
Rank: 2
等 级:论坛游民
帖 子:14
专家分:27
注 册:2012-10-18
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:1 
用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语言重新写的我看看也行。
搜索更多相关主题的帖子: 元素 
2013-01-01 15:19
SLmask
Rank: 2
等 级:论坛游民
帖 子:14
专家分:27
注 册:2012-10-18
收藏
得分:0 
回复 2楼 wp231957
但是实例输入里面应该有符合我的判断条件可以跳出循环的啊
2013-01-01 17:22
快速回复:用getchar读取字符,回车后没有反应
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043402 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved