Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
177 views
in Technique[技术] by (71.8m points)

c++ - Why does the name of a source file affect compilation?

I came across something really weird when I wrote a little lotto program in C++ called "lotto.cpp". Everything was fine until I wrote the write-to-file for my program. When I compiled, it showed me the following error:

ld: can't open output file for writing: lotto, errno=21 for architecture x86_64
collect2: ld returned 1 exit status

By coincidence, I changed the name of my program to "1.cpp", and all of a sudden it compiled without problems. It also worked when I changed the name to "test.cpp".

I am really curious as to why this happened. Any Ideas?

This happened on a MacBook Pro.

If you want the code as well, just let me know!


I know some people asked for the code. Here it is:

#include <iostream>
#include <fstream>

using namespace std;

const int NED  = 10;            
const int VIKING =  6;
const int NORMAL =  7;
const int MAX  = 10;

void quickSort(int arr[], int left, int right);
int checkDuplicates(int arr[], int length);

int main (int argc, const char *argv[])
{
    int i, j, k, ans;
    char ans2;
    int lottoNumbers[MAX];

    ofstream out("Lotto.txt", ios::out | ios::app);

    srand((unsigned)time(NULL));    

    do
    {
        do
        {
            cout << "

Do you want to play Viking Lotto (press 6), or normal Lotto (press 7): ";
            cin >> ans;
        }while(ans != VIKING && ans != normal);

        (ans == VIKING) ? cout << "
Viking Lotto:
" : cout << "

normal Lotto:
";
        (ans == VIKING) ? out << "
Viking Lotto:
" : out << "

normal Lotto:
";


        for (i = 0; i < NED; i++)       //10 rows
        {       
            for (j = 0; j < ans; j++)  //6 or 7 columns
            {
                (ans == VIKING) ? lottoNumbers[j] = (rand() % 48) + 1 : lottoNumbers[j] = (rand() % 34) + 1;
            }
            if(checkDuplicates(lottoNumbers, ans) != -1)        
            {
                for(k = 0; k < ans; k++)
                {
                    while(checkDuplicates(lottoNumbers, ans) == lottoNumbers[k])    
                    {
                        (ans == VIKING) ? lottoNumbers[k] = (rand() % 48) + 1 : lottoNumbers[k] = (rand() % 34) + 1;
                    }
                }
            }
            quickSort(lottoNumbers, 0, ans - 1);  
            cout << '
';

            for(j = 0; j < ans; j++)
            {
                cout << lottoNumbers[j] << ''; 
                out << lottoNumbers[j] << '';
            }
            out << '
';

        }   
        cout << "

";


        cout <<"Another lottery ticket (Y/N) ";
        cin >> ans2;
    }while(ans2 == 'j' || ans2 == 'J');

    cout << "

LOTTO NUMBERS WAS WRITTEN TO FILE...

";

    return 0;
}

void quickSort(int arr[], int left, int right) 
{
    int i = left, j = right;
    int tmp;
    int mid = arr[(left + right) / 2];

    while (i <= j) 
    {
        while (arr[i] < mid)    i++;
        while (arr[j] > mid)    j--;
        if (i <= j) 
        {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    };
    if (left < j)   quickSort(arr, left, j);
    if (i < right)  quickSort(arr, i, right);
}

int checkDuplicates(int arr[], int length)  
{                                       
    for(int i = 0; i < length; i++)
    {
        for(int j = i + 1; j < length; j++)
        {   
            if(arr[i] == arr[j])    return arr[j];
        }
    }
    return -1;  
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Error number 21 (on MacOS X 10.7.2) is EISDIR: Is a directory.

The name lotto seems to be a directory, not a file.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...