En passant de la 2d tableau de char en fonction de
Je suis en train de passer d'un tableau 2D avec des cordes en dans une fonction. Je reçois le
attendu expression avant de l' ] jeton.
Le point de ce code est de lire dans un casse-tête, puis de trouver les mots dans ce casse-tête. Je vais écrire une fonction de recherche avant, backword de recherche, puis en haut et en bas de la recherche.
Comment puis-je me débarrasser de cette erreur? L'erreur est à la base où j'appelle la fonction de transfert.
/*Andrea Hatfield CPE 101 October 31st, 2012*/
#include <stdio.h>
#include <string.h>
int forward(char words[][8], char puzzle[][11]);
int main()
{
char puzzle[11][11];
char words[8][8];
FILE *fin, *fwords;
int i = 0;
int j= 0;
fin = fopen("puzzle.in", "r");
fwords = fopen("words.in", "r");
if(fin == NULL) /*Reads in the puzzle file*/
printf("File does not exist");
else
{
while(fscanf(fin,"%s", puzzle[i])!=EOF)
{
printf("%s\n", puzzle[i]);
i++;
}
}
if(fwords == NULL) /*Reads in the words the puzzle will search for */
printf("File does not exist");
else
{
while(fscanf(fwords, "%s", words[j])!=EOF)
{
printf("%s\n", words[j]);
}
}
forward(&words[][8], &puzzle[][11]); /*Error at this point*/
return(0);
}
Bienvenue sur Stackoverflow, pouvez-vous veuillez donner une question claire?
OriginalL'auteur hatfieldac | 2012-11-02
Vous devez vous connecter pour publier un commentaire.
C'est un peu dur pour obtenir ce que vous voulez mais il y a un problème ici:
essayez plutôt ceci:
Voici deux autres options qui devraient être mentionnés ici:
OriginalL'auteur 0x90
Vous devez appeler directement
Cependant, vous avez une erreur dans votre code: vous avez oublié le
j++
dans le cycle de lecture lors de la lecture dewords
, de sorte que vous écrasezwords[0]
et de ne pas initialiser les autres membres du groupe.Aussi, dans une situation du monde réel, vous trouverez peut-être souhaitable de choisir la taille de la matrice au moment de l'exécution. Une façon simple de le faire est de choisir un assez grand limite pour la largeur et la hauteur, et aller avec 0x90 de la solution (vous avez besoin d'un 30x20 puzzle, et vous pouvez le manipuler facilement, puisque vous avez compilé avec LIGNES et COLONNES égal à, disons, 1024).
Plus compliquées de façon serait d'utiliser
malloc()
(utilisation de pointeurs de pointeurs de caractères) et d'allouer les deux tableaux dynamiquement, limité par la mémoire disponible; vous pouvez alors passer leurs dimensions à laforward
fonction.Encore, la répartition serait plus compliqué compte tenu de la boucle appels à
malloc()
et la nécessité de vérifier sa valeur de retour à chaque fois pour intercepter out-of-memory conditions; aussi, dans certains scénarios, vous voudrez peut-être la mémoire à dealloué (par exemple, pour exécuter répété des énigmes), ce qui conduit à une plus grande complexité.Je suis désolé, @M. M , mais... ce n'est pas ce que j'ai proposé? l'offre de l'extérieur signifie exactement que, passe les dimensions de paramètres supplémentaires. Puisqu'il y a deux tableaux (des mots et des casse-tête), j'ai besoin de quatre paramètres supplémentaires. Je vais vous avouer que j'ai autorisé rectangulaires de puzzles; pour la place dont vous avez besoin seulement la moitié des paramètres 🙂
Vous êtes également en suggérant de changer pour le passage d'un pointeur de pointeur et l'utilisation de malloc (dont je ne suis pas, juste de passage les dimensions et la rétention de la méthode d'allocation du tableau)
Je vois. Oui, cela pourrait être considéré comme une complexité supplémentaire. Il n'avait pas traversé mon esprit. Je vais reformuler la réponse en conséquence; merci!
OriginalL'auteur LSerni