Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用空格分隔的数字的scanf_C++_Linux_Scanf - Fatal编程技术网

C++ 用空格分隔的数字的scanf

C++ 用空格分隔的数字的scanf,c++,linux,scanf,C++,Linux,Scanf,我知道用空格分隔的数字的数量。下面的代码在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; ci

我知道用空格分隔的数字的数量。下面的代码在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];
    }
}
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
ios_base::与_stdio同步(0);
无符号长k,p,q,all;
cin>>k>>p>>q;
矢量klo(k);
all=0;

对于(unsigned long i=0;i可能不同平台的字位大小不同,您的向量中有long type,您只读取
int
type,这无法重写long变量的整个大小,您将得到一个long变量,其中一半字节未初始化

尝试更改:

scanf("%d", &klo[i]);
进入:


ld
表示长十进制类型。

%d
用于读取int。您正在尝试读取长十进制类型,即
%ld


< C++ IO系统的优点之一是 CIN > KLO [i] < /C>将对这两种类型都做正确的事情。

< P>当我在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]);
,它成功了。Windows是宽容的。我还必须添加

#include <stdio.h>
#包括

作为一个额外的包含文件。

为什么不在循环中简单地使用
std::cin>
?@JoachimPileborg是的,它成功了,谢谢!仍然没有,但是@Joachim Pileborg关于cin的评论解决了这个问题。谢谢你的回复。
%ld
仍然不起作用,但是cin解决了这个问题。
long
int
是这就是为什么尽管在技术上调用了未定义的行为,它仍然可以在Windows上运行。
#include <stdio.h>