2017-09-21 4 views
1

J'ai un programme avec une boucle en dehors de la fonction principale:Pourquoi cette boucle continue-t-elle sans arrêt?

#include <stdio.h> 

void inputMaze(char maze[], int maxX, int maxY); 

int main() 
{ 
//Number of columns 
int maxX= 0; 
//Number of rows 
int maxY= 0; 

printf("Number of rows? "); 
scanf("%d", &maxY); 
printf("Number of columns? "); 
scanf("%d", &maxX); 
if(maxX*maxY>300){ 
    printf("Number of cells exceeds maximum!/n"); 
} 
char maze[maxX][maxY]; 
inputMaze(maze,maxX, maxY); 
return 0; 
} 

void inputMaze(char maze[], int maxX, int maxY){ 
int i; 
for(i=0; i<maxY; i=i+1){ 
     printf("Input row %d ", i); 
     scanf(" %c", &maze[i]); 

} 
} 

La sortie me donne ceci:

Number of rows? 10 
Number of columns? 10 
Input row 0 S##### 
Input row 1 Input row 2 Input row 3 Input row 4 Input row 5 Input row 6 D..... 
Input row 7 Input row 8 Input row 9 
Process returned 0 (0x0) execution time : 11.526 s 
Press any key to continue. 

Je ne veux pas d'entrée ligne 1 ligne d'entrée 2 .... être imprimé comme ça. J'essaye de l'obtenir afin qu'il imprime la ligne d'entrée i sur une nouvelle ligne chaque fois et que l'utilisateur puisse entrer une nouvelle ligne. Je pense que le problème pourrait être lié au scanf stocké dans un tableau 2D. Je voudrais être ainsi qu'une ligne dans le tableau de labyrinthe est écrite à la fois et que chaque élément de la ligne est repris par une lettre, mais je ne peux pas sembler le faire.

Répondre

1

problème se trouve dans cette déclaration

scanf ("% c", & labyrinthe [i]);

Vous essayez de lire par caractère par caractère qui est faux. Vous devez lire les lignes maxY en tant que chaînes. J'ai produit le code de travail ici.

#include <stdio.h> 

void inputMaze(char maze[], int maxX, int maxY); 

int main() 
{ 
//Number of columns 
int maxX= 0; 
//Number of rows 
int maxY= 0; 

printf("Number of rows? "); 
scanf("%d", &maxY); 
printf("Number of columns? "); 
scanf("%d", &maxX); 
if(maxX*maxY>300){ 
    printf("Number of cells exceeds maximum!/n"); 
} 
char maze[maxX][maxY]; 
inputMaze(maze,maxX, maxY); 
return 0; 
} 

void inputMaze(char maze[], int maxX, int maxY){ 
int i; 
for(i=0; i<maxY; i=i+1){ 
     printf("Input row %d\n", i); 
     scanf("%s", &maze[i]); 

} 
} 

Si vous avez besoin de plus d'assistance, n'hésitez pas à commenter.

+0

Merci! Donc, fondamentalement, vous venez de changer% c en% s et cela ajoute automatiquement la chaîne en tant que tableau? Comment se fait-il que le programme ne tombe pas en panne/array à court d'espace si je crée maxX et maxY 6 et que j'entre une chaîne de 7 caractères? EDIT: À quoi ressemble-t-il dans un tableau? Lorsque j'ajoute une boucle for qui imprime% c dans le labyrinthe [i], il semble juste imprimer le premier symbole de chaque ligne. – CoderEH

+0

pouvez-vous l'exécuter dans ideone et poster un lien ici? Je suis prêt à aider – Sridharan

+0

https://ideone.com/FGjz5t Merci! – CoderEH