volver repita repetir reiniciar regrese que programa preguntar inicio hacer como ciclo c while-loop

repita - ¿Cómo reinicio un ciclo while?



reiniciar variables c++ (3)

Debe restablecer el puntero del archivo. Sin embargo, esto es bastante ineficiente. Sería mejor buscar las palabras en algún tipo de índice. Si el diccionario puede caber en la memoria, puede usar una tabla hash o un trie (o incluso un simple árbol de búsqueda binaria) para hacer el ciclo mucho más rápido. Si el diccionario es demasiado grande para caber en la memoria, podría utilizar una búsqueda más eficiente en un archivo basado en una búsqueda binaria.

Aquí hay un extracto de código en el que estoy trabajando. Me preguntaba cómo iba a reiniciar el ciclo anidado. Permanece al final del archivo cuando el primer ciclo se ejecuta nuevamente.

while(fscanf(fp2,"%s", wordcheck)!=EOF)//Reads word from text file into array// { for (i=0; wordcheck[i]; i++) { wordcheck[i] = tolower(wordcheck[i]);//makes all characters lower case// } printf("%s", wordcheck); while(fscanf(fp1,"%s", worddict)) { if(strcmp(wordcheck, worddict)==0)//compare strings// { printf("This word: %s is in the dictionary/n", wordcheck); dictcount++; break; } else { dictcount++; } if(worddict == NULL) { printf("Your word: %s is not in the dictionary/n", wordcheck); } } }


La forma más fácil es rewind() la secuencia, con un simple

rewind(fp2);

Esto es lo que necesita, ya que no es "el ciclo" lo que debe restablecerse. El bucle solo itera sobre las líneas de un archivo de entrada, y el bucle en sí no puede "reiniciarse" sin cambiar el estado del archivo de alguna manera. Afortunadamente, eso es exactamente lo que rewind() , ya que restablece el archivo para que esté como estaba justo después de que lo haya abierto.

Como han señalado otros, esta es una forma muy ineficaz de validar textos en un diccionario, ya que la repetición basada en archivos se repite para cada palabra de entrada que se va a verificar. Los archivos no son particularmente rápidos, especialmente no se comparan con los datos en la memoria. Por lo tanto, probablemente sería una gran victoria si haces esto para grandes conjuntos de entrada para construir algún tipo de diccionario en memoria basado en la entrada del archivo.

Esto podría ser muy simple, recomendaría comenzar con una matriz de palabras que primero ordena (con qsort() ) y luego buscar usando la búsqueda binaria (disponible en la bsearch() biblioteca estándar bsearch() ). Al construir la matriz inicial, querrá usar realloc() para crecer de forma dinámica, ya que no puede saber cuándo abre el archivo de diccionario cuántas palabras contiene.


Use fseek :

fseek(fp2, 0, SEEK_SET);

.. o más simplemente, rewind :

rewind(fp2);