0

スペースで区切られた数字の量を知っています。次のコードは、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

どうしたの?

4

3 に答える 3

3

%dintを読むためのものです。あなたは長いものを読もうとしています - それは%ld.

C++ IO システムの利点の 1 つは、cin >> klo[i]両方のタイプに対して正しいことを行うことです。

于 2013-11-02T14:09:08.623 に答える
3

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>

追加のインクルード ファイルとして。

于 2013-11-02T14:11:00.550 に答える