我是大帅比ZED @ 2022-10-16 23:01:18
疑惑:
此处条件为何不能 用scanf("%c", &right);来实现
而是取用cin?
1.1 如果我想用scanf 又该如何处理呢?
为何我直接用printf("%d", sqrt(n));系统却会报错?然后输出不了
2.1 解决方法难道只有 用cout 或者 定义一个新的变量来解决吗?
[警告] format '%d' expects argument of type 'int', but argument 2 has type 'gnu_cxx::__enable_if<true, double>::type' {aka 'double'} [-Wformat=]
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
int main (void)
{
int n = 0;//读入n个数 最后输出 n^0.5
int point = 1, count[200*200+1] = {0};//point 代表指向count数组 用来计数0或1 单次累计
char left = '0', right;//题目先从0开始读入 所以先给left附上0
while (cin >> right)
{//疑惑1
n++;//有多少个数字 就加多少个
if (right != left)//如一直读入都是0 突然出现1了 那么point 该下一位了
{
point ++;
count[point]++;
}
else
{//否则继续累加
count[point]++;
}
left = right;//向右滚动
}
//以下是疑惑2
//int n2 = sqrt(n);printf("%d", n2);
//printf("%d", sqrt(n));
cout << sqrt(n);
for (int i=1; i<=point; i++)
printf(" %d", count[i]);
return 0;
}
by Terminator_SHH @ 2022-10-16 23:03:31
@我是大帅比ZED
by Hisaishi_Kanade @ 2022-10-16 23:05:00
scanf("%c")
不过滤空白字符,会读入换行等,导致结果错误。解决办法一般有读入字符串 scanf("%s",str);
再取 str[0]
或者使用 scanf(" %c")
。这个空格相当于命令他过滤掉当前空白字符。sqrt()
返回值是 double
类型。你的占位符却是 %d -> int
,编译器自然会报错。你可以 printf("%f"/"%lf")
或者强制类型转换。by hmya @ 2022-10-16 23:43:17
@我是大帅比ZED scanf("类型",x)!=EOF是可以的
by 我是大帅比ZED @ 2022-10-17 08:22:02
@shh123456 感谢orz!
by 我是大帅比ZED @ 2022-10-17 08:22:22
@bye_wjx 感谢orz!
by 我是大帅比ZED @ 2022-10-17 08:22:35
@H2OCaO 感谢orz!
by 我是大帅比ZED @ 2022-10-17 10:18:05
@bye_wjx 大佬那个str[0]是啥意思呀