扫描以空格分隔的数字
scanf for numbers separated by space
我知道用空格分隔的数字数量。以下代码在Windows中确实有效,但在Linux中不起作用。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
ios_base::sync_with_stdio(0);
unsigned long k,p,q, all;
cin >> k >> p >> q;
vector<long> klo(k);
all = 0;
for(unsigned long i = 0;i<k;i++){
scanf("%d", &klo[i]);
all += klo[i];
}
}
正如我所说,在Windows下可以完美运行,但是Linux会在那里分配一些随机值:-1220155675-1220155675-12201556750
怎么了?
也许不同
平台的字位大小不同,你的向量中有 long 类型,你只读取int
类型,它无法重写长变量的整个大小,你会得到一个长变量,其中一半的字节未初始化。
尝试更改:
scanf("%d", &klo[i]);
到:
scanf("%ld", &klo[i]);
ld
表示长十进制类型。
当我在 Linux 上编译您的代码时,它给了我以下错误:
$: /tmp$ g++ -g foobar.c
foobar.c: In function ‘int main(int, char**)’:
foobar.c:17:28: warning: format ‘%d’ expects argument of type ‘int*’, but argument 2 has type ‘long int*’ [-Wformat=]
scanf("%d", &klo[i]);
^
我把它改成scanf ( "%ld", &klo[i] );
它起作用了。 窗户是宽容的。 我还必须添加
#include <stdio.h>
作为附加的包含文件。
%d
用于读取int。您正在尝试阅读很长的内容-那将%ld
.
C++ IO 系统的优点之一是cin >> klo[i]
可以为这两种类型做正确的事情。
相关文章:
- 如何在 C++ 中将文件中的逗号分隔数字读取到数组中?
- 分隔整数 (C++) 的数字
- 如何从文件中读取用空格分隔的数字
- C ++正则表达式允许用点分隔的数字
- 读取以逗号分隔的数字,并将其写入以制表符分隔的文件
- C++ 从文件中读取 int,每个数字用逗号分隔
- 我如何使用CIN输入整数,每个数字都被逗号分隔
- 如何从逗号分隔的数字对中填充 2 个向量 C++.
- 为什么我可以在 C++ 中用撇号分隔数字,但不能用 C 分隔数字
- 用字符分隔数字
- 逗号分隔的数字在模拟器上正确显示,但在iPad上没有显示
- 在 cpp 中使用 getline 输入数组中的空格分隔数字
- 给定分隔成数组元素的数字,如何在 int 中重新组合数字
- 如果字符串中没有空格,如何解析带有数字和字符的字符串并分隔数字和字符
- 扫描以空格分隔的数字
- 解析逗号分隔的数字(C++)
- C++ - 如何将空格分隔的数字输入数组
- 递增由不同分隔符分隔的字符数组中的数字
- 读取空格将数字从文本文件分隔到整数数组 (C++)
- 将大数字分隔为数字c++