2012-02-08 20 views
10

जब मैं "lotto.cpp" नामक सी ++ में थोड़ा लोट्टो प्रोग्राम लिखता हूं तो मैं वास्तव में कुछ अजीब बात करता हूं। सब कुछ ठीक था जब तक कि मैंने अपने कार्यक्रम के लिए लिखने के लिए फ़ाइल नहीं लिखा। जब मैं संकलित, यह मेरे निम्न त्रुटि से पता चला है:स्रोत फ़ाइल का नाम संकलन को क्यों प्रभावित करता है?

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

संयोग से, मैं करने के लिए "1.cpp" मेरे कार्यक्रम का नाम बदल दिया, और अचानक यह समस्याओं के बिना संकलित। जब मैंने नाम को "test.cpp" में बदल दिया तो यह भी काम करता था।

मैं वास्तव में उत्सुक हूं कि ऐसा क्यों हुआ। कोई विचार?

यह मैकबुक प्रो पर हुआ।

यदि आप कोड भी चाहते हैं, तो बस मुझे बताएं!


मुझे पता है कि कुछ लोगों ने कोड के लिए कहा था। संदेश यह है:

#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 << "\n\nDo you want to play Viking Lotto (press 6), or normal Lotto (press 7): "; 
      cin >> ans; 
     }while(ans != VIKING && ans != normal); 

     (ans == VIKING) ? cout << "\nViking Lotto:\n" : cout << "\n\nnormal Lotto:\n"; 
     (ans == VIKING) ? out << "\nViking Lotto:\n" : out << "\n\nnormal Lotto:\n"; 


     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 << '\n'; 

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

     } 
     cout << "\n\n"; 


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

    cout << "\n\nLOTTO NUMBERS WAS WRITTEN TO FILE...\n\n"; 

    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; 
} 
+0

कृपया कोड दें। ऐसा लगता है कि आप बिना किसी अनुमति के फ़ाइल संपादित कर रहे हैं। – beta0x64

+0

इसके अलावा, अपनी निर्देशिका संरचना (dir और अंदर फ़ाइलों का नाम) – beta0x64

+0

त्रुटि 21 की आपूर्ति कृपया '/ usr/शामिल/sys/errno.h' है' EISDIR', आप एक निर्देशिका में लिखने की कोशिश कर रहे थे? – Gaius

उत्तर

23

त्रुटि क्रमांक 21 (MacOS एक्स 10.7.2 पर) EISDIR: Is a directory है।

नाम lotto एक निर्देशिका नहीं है, न कि एक फ़ाइल।

+0

आपका बिल्कुल सही सर! मुझे पता नहीं था कि मैं अपने C++ फ़ाइल, दोनों डेस्कटॉप में स्थित रूप में एक ही नाम से एक फोल्डर था। संपादित करें:: कोड बहुत अधिक वर्ण है: मेरे द्वारा बेवकूफ गलती ... –

1

यह एक लिंकर त्रुटि है जो बताती है कि संकलन करते समय हम आपके कंप्यूटर पर 'लोट्टो' फ़ाइल को नहीं लिख सकते हैं। मेरा अनुमान है कि या तो आपका प्रोग्राम अभी भी चल रहा है, या आपने गलती से 'लोट्टो' नामक एक निर्देशिका बनाई है। यह संभव है कि आपका लेखन-टू-फ़ाइल फ़ंक्शन एप्लिकेशन को चल रहा है, या स्वयं ने लोट्टो निर्देशिका बनाने की कोशिश की है।

+0

यहाँ कोड के बाद से कुछ लोगों को इसे देखने के लिए चाहता था / –

1

हाँ मैं अपने मैक में अपने कुछ दृश्य स्टूडियो कोड की प्रतिलिपि बनाकर इस समस्या में भाग गया। ऐसा लगता है कि विजुअल स्टूडियो आपके प्रोजेक्ट के अंदर फ़ोल्डरों को आपके निष्पादन योग्य नाम से बनाना पसंद करता है जो इसका कारण बनता है!

0

FWIW मैं जब मैं एक निर्देशिका है कि अभी तक नहीं बनाया गया था, अर्थात bin/MyProgram में मेरी आउटपुट फ़ाइल लिखने के लिए कोशिश कर रहा था यह त्रुटि हुई।

एक बार जब मैंने बिन निर्देशिका बनाई तो सबकुछ ठीक था; मुझे कुछ भी नाम देने की ज़रूरत नहीं थी। जीसीसी अगर यह मौजूद नहीं है निर्देशिका बनाने के लिए है, जबकि बजना (पास के रूप में मैं बता सकता हूँ के रूप में कम से कम thats) नहीं है लगता है।

संबंधित मुद्दे