Почему различный вывод компилятора C ++ и C #? - PullRequest
0 голосов
/ 10 июля 2011

Мне задавали эти вопросы раньше, но на этот раз я хочу узнать разницу между компилятором C++ и C#.

C # кодирование массива

static void Main(string[] args)
    {
        int n;
        int[] ar = new int[50];
        Console.Write("Enter the size of array= ");
        n = int.Parse(Console.ReadLine());
        for (int i = 0; i < n; i++)
        {
            ar[i] = int.Parse(Console.ReadLine());
        }
        for (int i = 0; i < n; i++)
        {
            Console.WriteLine("AR[" + i + "]=" + ar[i]);
        }
        Console.Read();
    }

выход

C# output

C ++ кодирование массива

int main()  
{  
    clrscr();  
    int x[10];  
    int n;  
    cout << "Enter the array size= ";  
    cin >> n;  
    cout << "Enter the elements for array= ";  
    for(int i = 0; i < n; i++)  
    {  
        cin >> x[i];  
    }
    for(int i = 0; i < n; i++)  
    {  
        cout << "x[" << i << "]=" << x[i] << "\n";  
    }   
    getch();  
    return 0;  
}

выход

C++ output
Теперь вот мой вопрос: когда m дает тот же самый ввод для C #, тогда он запрашивает 4 элемента для ввода и оставляет 0 перед любой цифрой. Но когда я иду с тем же самым вводом в C ++, то он рассматривает 0 с любой цифрой как отдельный ввод, даже м, давая ему цифру и занимая меньше ввода, чем я ввел.

Даже оба языка следуют подходу ООП. Так в чем же разница между компилятором? Почему они принимают много разных входных данных и генерируют разные выходные данные.

Еще одна проблема, которая беспокоит меня: почему компилятор C ++ не читает 0 для последнего элемента и печатает 7, а у меня ввод 07, так что в соответствии с выводом выше он должен быть 0, а не 7.

Ответы [ 2 ]

5 голосов
/ 10 июля 2011

Это полное предположение, но Borland C ++ пытается интерпретировать число с начальным 0 как восьмеричное (это стандартное соглашение, такое как префикс '0x' для шестнадцатеричного). Поскольку 08 не является действительным восьмеричным числом (только 0-7 являются действительными цифрами в восьмеричном виде), оно разделяется на два входа.

Попробуйте ввести '010', и если программа выведет 8, вы поймете, что она интерпретирует что-либо с начальным нулем как восьмеричное.

Вы также можете попытаться заставить cin интерпретировать ваш ввод как десятичный, изменив строку ввода на:

cin >> dec >> x[i];
3 голосов
/ 10 июля 2011

Во-первых, неудивительно, что использование двух разных функций на двух разных языках, предназначенных для выполнения одной и той же задачи, даст вам несколько разные результаты.Если вы хотите знать, что делает каждый из них, посмотрите документацию.

В частности, cin >> i в C ++ определенно не действует так же, как int.Parse(Console.ReadLine()) в C #.Например, версия C ++ может читать несколько чисел из одной строки (разделенных пробелами), а версия C # - нет.

Но для вашего конкретного примера это выглядит либо как ошибка вкомпилятор, который вы используете, или может быть, что спецификация неясна.Если я скомпилирую ваш код C ++ в Visual Studio, он будет вести себя так же, как и версия C #.

Кроме того, я не уверен, что именно вы имели в виду, но ваш код C ++ определенно не «следует подходу ООП».(Я не говорю, что должен, просто это не так.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...