537 - Artificial Intelligence?

一.思路

二.代码

三.总结


一.思路

本题关键是字符串读入提取的问题,

一开始我觉得用getchar一个一个读然后判断的话,如果读到等号等号前面的字符没有办法得到了

用gets一次性读入一行字符的话还是要一个一个判断

于是想着用scanf,每次读入一个单词判断一下这个单词里有没有等号


但是实际上用scanf读反而会是程度读起来更复杂。因为用scanf读入后还是要一个字符一个字符的判断

实际上还是要对字符进行逐个的判断

而之前遇到的问题可以有两种解决办法,

用getchar循环读入

一是判断等号,但是每次记录前一个读取的字符,然后判断前一个字符是否是PUI这三个字符中的某一个

一是判断是否是P,U,I这三个关键字符,然后判断其后的字符是否是等号,如果是进行数字的提取,如果不是,进行下一次循环


二.代码

#include<stdio.h>


int main() {

	double P, I, U;
	char c,bc,t,pre;
	char line[1000];
	int n;

	scanf_s("%d", &n);
	t = getchar();

	int i;
	for (i = 1; i <= n;i++) {
		P = -1;
		I = -1;
		U = -1;
		int times = 2;
		while (times--) {
			while ((c = getchar()) != EOF) {
				if (c == '=') {
					if (bc == 'I') {
						scanf_s("%lf", &I);
						pre = getchar();
						if (pre == 'm') I = I*0.001;
						else if (pre == 'k')I = I * 1000;
						else if (pre == 'M')I = I * 1000000;

						break;
					}

					if (bc == 'U') {
						scanf_s("%lf", &U);
						pre = getchar();
						if (pre == 'm') U = U*0.001;
						else if (pre == 'k')U = U * 1000;
						else if (pre == 'M')U = U * 1000000;

						break;
					}

					if (bc == 'P') {
						scanf_s("%lf", &P);
						pre = getchar();
						if (pre == 'm') P = P*0.001;
						else if (pre == 'k')P = P * 1000;
						else if (pre == 'M')P = P * 1000000;

						break;

					}
				}// if c== '='
				bc = c;
			}//while c=getchar
		
		}//for i
		gets_s(line);
		printf("%s%d\n", "Problem #", i);

		if (P == -1) { printf("P=%.2fW\n", U*I); }
		else if (U==-1) { printf("U=%.2fV\n", P/I); }
		else if (I==-1) { printf("I=%.2fA\n",P/U); }

	}//while n

	return 0;

}

三.总结

如何选择最优的读入方式

读入时 注意转行符的处理 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值