5

このコードはhttp://www.spoj.com/problems/BASE/に問題があり、Windows と Linux では正常に動作しますが、ideone で実行すると出力が表示されません。この背後にある理由は何ですか?

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<string>
#include<iostream>

using namespace std;

long int convert_base10(char *num, int base)
{
int len, dig;
long int result = 0;
len = strlen(num);
//    printf("len = %d\n", len);
// converting to base 10
for(int i=0; i<len; i++)
{
    if((num[len-i-1] >= 'A') && (num[len-i-1] <= 'F'))
        dig = num[len-i-1] - 55;
    else
        dig = num[len-i-1] - 48;
    result +=  (dig * pow(base, i));
  //        printf("num[%d] = %d\n", len-i-1, dig);
}
return result;
}

void convert_basei(long int num, int base, string &result1)
{
bool error = false;
int pos = 6;
char result[7], rem;
// initially storing space on all position
for(int i=0; i<7; i++)
    result[i] = ' ';
while(num)
{
    if((num % base) >= 10)
        rem = (num % base) + 55;
    else
        rem = (num % base) + 48;
    result[pos] = rem;//printf("result[%d] = %c\n", pos, rem);
    num /= base;//    printf("quotient = %d\n", num);
    pos--;
    if(pos < 0 && num > 0)
    {
        error = true;
        break;
    }

}
if(error == true)
   result1 = "  ERROR";
else
    result1 = result;
//    cout<<"result = "<<result1<<endl;
}

int main()
{
char num[7];
string result;
int base1, base2;
while(scanf("%s%d%d", num, &base1, &base2) == 3)
{
//        printf("num = %s\nbase1 = %d\nbase2 = %d\n", num, base1, base2);
    long int temp = convert_base10(num, base1);
//        printf("temp = %ld\n", temp);
    convert_basei(temp, base2, result);
    cout<<result<<endl;
}
return 0;
}
4

2 に答える 2

3

次のコードを置き換えます。

while(scanf("%s%d%d", num, &base1, &base2) == 3)
{
    long int temp = convert_base10(num, base1);
    convert_basei(temp, base2, result);
    cout<<result<<endl;
}

このコードを使用すると、謎が解消されます。

printf("trying to get input\n");
while(scanf("%s%d%d", num, &base1, &base2) == 3)
{
    printf("got some input\n");
    long int temp = convert_base10(num, base1);
    convert_basei(temp, base2, result);
    cout<<result<<endl;
}
printf("got no input\n");
于 2013-02-16T06:46:38.893 に答える
0

のバグの疑いがありideone.comます。

ソースと入力のクローンを作成しましたが、いくつかの小さな調整を加えましたが、出力がまったく表示されません。なんらかの出力が見られると思っていたので、ページの「バグを報告/提案する」リンクを使用してレポートを提出しました。

次に、それを再度複製し、さらにいくつかのスタイルの変更を加えたところ、望ましい結果が得られました。


イデオネからの返信

Date: Fri, 8 Mar 2013 12:18:49 +0100
From: Filip Wielewski <wiele@s...>
To: paj-ideone@j...
Cc: contact@i...
Subject: Re: Please see this question on StackOverflow for an explanation...

Hi [Johnsyweb],

thank you for letting us know about this issue. There is indeed
some problem with the original source code posted by Vijay Jain.
We will examine it and try to fix it very soon.

Regards,
Filip Wielewski
Ideone Team

2013/2/16 Ideone bug/suggestion <noreply@i...>

    Ideone bug/suggestion

    category: compiler/interpreter
    type: bug
    date: 2013-02-16 08:38:16
    user: johnsyweb
    e-mail: paj-ideone@j...
    site: http://ideone.com/Q8Kv9m
    compiler: C++ (ver: gcc-4.7.2, id: 1)
    description: Please see this question on StackOverflow for
    an explanation: http://stackoverflow.com/q/14907730/78845

    My response:
    http://stackoverflow.com/a/14908061/78845

    Regards;


    --paj
于 2013-02-16T07:29:35.133 に答える