c++ 输入用若干空格和换行分隔数字 怎么识别什么时候输出?
完整题目InputTheinputstreamcontainsasetofintegernumbersAi(0≤Ai≤1018).Thenumbersareseparat...
完整题目
Input
The input stream contains a set of integer numbers Ai (0 ≤ Ai ≤ 10 18). The numbers are separated by any number of spaces and line breaks. A size of the input stream does not exceed 256 KB.
Output
For each number Ai from the last one till the first one you should output its square root. Each square root should be printed in a separate line with at least four digits after decimal point.
例如:
输入:
1427 0
876652098643267843
5276538
输出:
2297.0716
936297014.1164
0.0000
37.7757 展开
Input
The input stream contains a set of integer numbers Ai (0 ≤ Ai ≤ 10 18). The numbers are separated by any number of spaces and line breaks. A size of the input stream does not exceed 256 KB.
Output
For each number Ai from the last one till the first one you should output its square root. Each square root should be printed in a separate line with at least four digits after decimal point.
例如:
输入:
1427 0
876652098643267843
5276538
输出:
2297.0716
936297014.1164
0.0000
37.7757 展开
展开全部
输入数据,数据与数据 用 空白 分隔 或 换行符 分隔
全部数据输入完毕换行后,拍入组合键 Ctrl-Z (EOF) 结束。
开方后,按输入次序倒序输出。
用 getc(stdin); “窥测” 是否 是 空白,换行,EOF
用 ungetc 放回“窥测”到的数值字符
#include <iostream>
using namespace std;
#include <stdio.h>
#include <math.h>
double v[64000];
int main()
{
int c;
int i,n=0;
printf("input data, press ctrl_Z to finish\n");
while(1){
c=getc(stdin);
if ( c==EOF) break;
while (c==' ' || c=='\n' ) c=getc(stdin);
if ( c==EOF) break;
ungetc(c,stdin);
if ( scanf("%lf",&v[n]) == 1) n++;
}
for (i=n-1;i>=0;i--)
printf("%.4lf\n",sqrt(v[i]));
return 0;
}
全部数据输入完毕换行后,拍入组合键 Ctrl-Z (EOF) 结束。
开方后,按输入次序倒序输出。
用 getc(stdin); “窥测” 是否 是 空白,换行,EOF
用 ungetc 放回“窥测”到的数值字符
#include <iostream>
using namespace std;
#include <stdio.h>
#include <math.h>
double v[64000];
int main()
{
int c;
int i,n=0;
printf("input data, press ctrl_Z to finish\n");
while(1){
c=getc(stdin);
if ( c==EOF) break;
while (c==' ' || c=='\n' ) c=getc(stdin);
if ( c==EOF) break;
ungetc(c,stdin);
if ( scanf("%lf",&v[n]) == 1) n++;
}
for (i=n-1;i>=0;i--)
printf("%.4lf\n",sqrt(v[i]));
return 0;
}
追问
用getc一定要ctrl+Z才能结束。结果是对的。但是要求的方法似乎不是这个。。谢谢啦。
追答
getc 不一定要ctrl+Z才能结束。你只要设定 c 等于什么 结束便可。
展开全部
利用scanf()函数自身的功能就能解决多个空格、空行问题。
/*
1270
35.6371
0
0.0000
876652
936.2970
5276538
2297.0716
36
6.0000
-1
Press any key to continue
*/
#include <stdio.h>
#include <math.h>
int main() {
double num;
while(scanf("%lf",&num) == 1 && num >= 0.0)
printf("%.4lf\n",sqrt(num));
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
文件结束符就是终止输入,按 ctrl-Z。
一般都这样的,检测你程序对不对,都重定向输入输出为文本文件的,不然每次检测都要手输,不是要累死。
一般都这样的,检测你程序对不对,都重定向输入输出为文本文件的,不然每次检测都要手输,不是要累死。
更多追问追答
追问
右键粘贴就可以了。不是手输的问题。
EOF用法也知道。但是像这题有空格和空行应该怎么识别输入的数据并且最后输出?
追答
你问的是怎么识别最后输出,当然就是EOF了啊,读到EOF了就读不了了,看你用什么API,scanf的话就是返回0了。
有空格和空行,就需要你自己解析了啊,一个一个字符的处理,遇到数字字符就缓存到临时字符串,遇到' ''\r''\n'就证明这个数字完了,可以把临时字符串转成double放到数组中了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询