Note that there are some explanatory texts on larger screens.

plurals
  1. POWhy does this go into an infinite loop?
    primarykey
    data
    text
    <p>Okay, so I'm trying to create a list of he folders, and sub-folders and their files, but right now it doesn't print anything, and seems to be going into an infinite loop. Any idea why?</p> <pre><code> //infinate loop start for(int j = 0; j &lt; (int) dirs[i].folders.size(); j++){ dirs.push_back(Directory(dirs[i].folders[j])); getfiles(dirs[i].dir,dirs[i].files); getfolders(dirs[i].dir,dirs[i].folders); } //infinate loop end </code></pre> <p>Here is the full source:</p> <pre><code>#include &lt;sys/types.h&gt; #include &lt;sys/stat.h&gt; #include &lt;dirent.h&gt; #include &lt;errno.h&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; struct Directory{ public: int indent; vector&lt;string&gt; files; vector&lt;string&gt; folders; string dir; Directory(string mydir){ dir = mydir;} }; int getfolders (string dir, vector&lt;string&gt; &amp;folders) { DIR *dp; struct stat st; struct dirent *dirp; if((dp = opendir(dir.c_str())) == NULL) { cout &lt;&lt; "Error(" &lt;&lt; errno &lt;&lt; ") opening " &lt;&lt; dir &lt;&lt; endl; return errno; } while ((dirp = readdir(dp)) != NULL) { stat(dirp-&gt;d_name, &amp;st); if(S_ISDIR(st.st_mode)){ if(dirp-&gt;d_name[0] != '.') folders.push_back(string(dirp-&gt;d_name)); } } closedir(dp); return 0; } /*function... might want it in some class?*/ int getfiles (string dir, vector&lt;string&gt; &amp;files) { DIR *dp; struct stat st; struct dirent *dirp; if((dp = opendir(dir.c_str())) == NULL) { cout &lt;&lt; "Error(" &lt;&lt; errno &lt;&lt; ") opening " &lt;&lt; dir &lt;&lt; endl; return errno; } while ((dirp = readdir(dp)) != NULL) { stat(dirp-&gt;d_name, &amp;st); if(!S_ISDIR(st.st_mode)){ files.push_back(string(dirp-&gt;d_name)); } } closedir(dp); return 0; } int main() { struct Directory root = Directory("."); vector&lt;string&gt; display = vector&lt;string&gt;(); cout &lt;&lt; "hello\n"; getfiles(root.dir,root.files); getfolders(root.dir,root.folders); cout &lt;&lt; "hello\n"; vector&lt;Directory&gt; dirs = vector&lt;Directory&gt;(); for(int i = 0; i &lt; (int) root.folders.size(); i++){ dirs.push_back(Directory(root.folders[i])); getfiles(dirs[i].dir,dirs[i].files); getfolders(dirs[i].dir,dirs[i].folders); //infinate loop start for(int j = 0; j &lt; (int) dirs[i].folders.size(); j++){ dirs.push_back(Directory(dirs[i].folders[j])); getfiles(dirs[i].dir,dirs[i].files); getfolders(dirs[i].dir,dirs[i].folders); } //infinate loop end } cout &lt;&lt; "hello\n"; for (int i = 0; i &lt; (int) root.folders.size();i++) { cout &lt;&lt; root.folders[i] &lt;&lt; endl; for(int j = 0; j &lt; (int) dirs[i].folders.size(); j++){ cout &lt;&lt; dirs[i].folders[j] &lt;&lt; endl; } } return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload