2013-07-17 10 views
5

मैं प्रोग्रामिंग के लिए वास्तव में नया हूं, और ग्रीष्मकालीन परियोजना के लिए एक सप्ताह के लिए इसके बारे में कड़ी मेहनत करने के बाद, मैं वास्तव में कुछ मदद की सराहना करता हूं!एक सरणी में एक पाठ फ़ाइल पढ़ने

मैं एक लंबी टेक्स्ट फ़ाइल में पढ़ने की कोशिश कर रहा हूं, जो अक्षरों की एक लंबी स्ट्रिंग (एनबी: वास्तविक प्रोग्रामिंग स्ट्रिंग नहीं) है, और उसके बाद प्रत्येक अक्षर को ग्रिड में अपना स्थान डाल दें (इसका उद्देश्य कार्यक्रम एक wordsearch हल करने के लिए) अब तक मैं नीचे कार्यक्रम है, जो एक ग्रिड का निर्माण किया जा प्रतीत नहीं होता है के साथ आ गया है अंततः है, बल्कि सिर्फ पाठ फ़ाइल, निम्न से पहले पुनः मुद्रण:

{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf510  
{\fonttbl\f0\fmodern\fcharset0 Courier;} 
{\colortbl;\red255\green255\blue255;} 
\paperw11905\paperh16837\margl1440\margr1440\vieww10800\viewh8400\viewkind0 
\deftab720 
\pard\pardeftab720 

\f0\fs24 \cf0 

#include <stdio.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <stdbool.h> 

int main() 
{ 
    int i,j; 
    char myarray[26][26],x; 
    FILE *myfile; 

    for (j=0; j<26; j++)     //initialise array elements all to zero 
    { 
     for (i=0; i<26; i++) 
     { 
      myarray[i][j]=0; 
     } 
    } 

    myfile=fopen("*redacted*","r"); 
    if (myfile!=NULL) //check file actually opened 
    { 
     for (i=0; i<26; i++) 
     { 
      for(j=0; j<26; j++) 
      { 
       fscanf(myfile,"%c",&x); //read the values in 
       myarray[i][j]=x; 
      } 
     } 
     // data is now in the array called myarray 
     fclose(myfile);   
    } 

    else 
    { 
     printf("File not found"); 
    } 

    for(i=0;i<26;i++) 
    { 
     for(j=0;j<26;j++) 
     { 
      printf("%c",myarray[i][j]); 
     } 
    } 

} 

किसी भी सहयोग के लिए धन्यवाद:

कार्यक्रम है कि मैं लिखा है यह है

आप एक ही आपरेशन में फ़ाइल पढ़ सकते हैं, और अपने आप को बचाने के पाशन:

कुछ

तरह
fread(myArray, sizeof(myArray), myfile) 

आप शायद चाहिए मदद से आप

+2

कोड को इंडेंट करने के लिए +1 (अधिक या कम) तो यह पठनीय है, और त्रुटि जांच करने के लिए भी। दुर्लभ पक्षी। –

+1

हालांकि, एक प्रश्न: इसका मतलब क्या है "यह एक सरणी उत्पन्न नहीं कर रहा है"? ** ** ** में सरणी है: यह 'myarray' ऑब्जेक्ट (चर) है। Mniparogocomputerhardwareywoieeoonodsmecivedegarotspesdfnidpctatrtnytrrrorcreoggimtnatosotmdroeoamupeuciwngbytekmgtoaeanrsnmgtdtittiimrehpponnnidtosdruamhvoaetmogeiuiutemouseopommaeyreaamrtvtfltnmslscmeedctdepulmeaioerkatluieoaredsitasyiamtrrrooeleeccrcyprkyunlontmewgsirsyricopcpoabgpetifgrddyorecsbimrdereapnnckoorecarfrhitnoiprscgstripeoratieotbpaornaoosetyeeatpumotrrmwnarrterrwmprraiopitaarceeaotkeduscdeipoesoskpttoudm अजीब पाठ मैं पोस्ट में नकल से preceeded: –

+0

कार्यक्रम तो जैसे पाठ फ़ाइल आउटपुट।मैंने यह जांचने की कोशिश की है कि वे पत्र हैं जहां वे होना चाहिए, और वे – user2591837

उत्तर

4

पेशकश कर सकते हैं यहाँ सी की खासियत है ऐसा करने से पहले सभी शून्यों में सरणी को प्रारंभ करें, हालांकि:

char myArray[26][26] = { 0 }; 

या यह शून्य से भरना यदि आप इसे प्रारंभ नहीं है:

memset(myArray, 0, sizeof(myArray)); 

इसके अलावा, आप अपने मुद्रण अनुभाग में प्रत्येक बाहरी पाश के अंत में एक नई पंक्ति ("\ n") मुद्रित करने के लिए चाहते हो सकता है: अन्यथा फ़ाइल सामग्री एक लंबी, निरंतर स्ट्रिंग के रूप में दिखाई देगी।

+0

सी – turnt

+5

की कुछ सुंदरियों में से एक यह हालांकि, कुछ बुरे अभ्यास को प्रोत्साहित करता है, जो एक शुरुआत करने की सिफारिश करने के लिए हानिकारक है। सबसे पहले, 'शून्य *' पर न डालें, यह अनिवार्य है और केवल एक चीज जो पठनीयता को कम कर रही है। दो, 'फ्रेड() 'के वापसी मूल्य की जांच करें - ओपी को त्रुटि प्रबंधन के बारे में पता चल रहा है, उसे गुमराह न करें, क्योंकि' फ्रेड() 'पूरे सरणी को नहीं पढ़ सकता है, इस मामले में किसी को फिर से प्रयास करना होगा। तीन, हार्ड-कोडित आकार के बजाय 'sizeof (array)' का उपयोग करें, यह सुरक्षित है। –

+0

लेकिन इस उत्तर में आखिरी पंक्ति ओपी के लिए महत्वपूर्ण है - उत्पन्न होने वाला आउटपुट इनपुट फ़ाइल की तरह दिखता है जब तक कि आप यह देखने के लिए न्यूलाइन जोड़ते हैं कि यह एक सरणी है। –

2

मैं अपने ग्रीष्मकालीन परियोजना ऐसा करने के लिए नहीं जा रहा हूँ, लेकिन यहाँ है कुछ टिप्पणी:

1) पाठ फ़ाइल एक पाठ फ़ाइल लेकिन एक RTF फ़ाइल है, जो स्वरूपण के साथ पाठ है नहीं है। आपने शायद टेक्स्ट एडिट का उपयोग करके इसे बनाया/सहेजा है। यदि ऐसा है, तो इसे ठीक करने के लिए 'सादा बनाएं टेक्स्ट' मेनू आइटम का उपयोग करें।

2) आपका प्रोग्राम निम्न कार्य कर रहा है: फ़ाइल (स्पेस, न्यूलाइन इत्यादि सहित) के 26x26 (क्यों 26?) वर्ण पढ़ें, उन्हें 26x26 सरणी में रखें, और फिर उन्हें एक-एक करके प्रिंट करें। मैं स्पष्ट नहीं कर रहा हूं कि आप क्या हासिल करने की कोशिश कर रहे हैं, लेकिन ऐसा लगता है कि सरणी को स्वरूपित करने के साथ कुछ करना है, इस मामले में आप शायद इस बारे में सोचना चाहेंगे कि इनपुट में व्हाइटस्पेस वर्णों को कैसे संभालना है, और उन्हें स्वयं प्रिंट करना उत्पादन उत्पन्न करना

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