Pour une raison quelconque, la boucle while dans main se termine une fois que j'entre un caractère à rechercher, mais l'intention est que vous puissiez entrer une ligne et ensuite un caractère à rechercher jusqu'à vous entrez une ligne vide (n'entrez rien). Fondamentalement, je voudrais faire l'étape 1 et l'étape 2 infiniment jusqu'à ce que je ne tape rien et appuyez sur Entrée. Pourquoi ça ne marche pas? Merci à tous pour votre aide!La boucle while ne se poursuit pas comme prévu
En outre, une petite question, comment puis-je effacer les déchets après la saisie d'un caractère pour la recherche?
#include <stdio.h>
#define SIZE 41
int CharIsAt(char *pStr,char ch,int loc[],int mLoc);
int main(void){
char array[SIZE],search;
int found[SIZE],i,charsFound;
//Step 1
printf("Enter a line of text(empty line to quit): ");
while (fgets(array,SIZE, stdin)!=NULL && array[0]!='\n'){ //Loop until nothing is entered
//Step 2
printf("Enter a character to search: ");
search=getchar();
charsFound=CharIsAt(array,search,found,SIZE);
printf("Entered text: ");
fputs(array,stdout);
printf("Character being searched for: %c\n",search);
printf("Character found at %d location(s).\n",charsFound);
for (i=0;i<charsFound;i++)
printf("%c was found at %d\n",search,found[i]);
printf("Enter a line of text(empty line to quit): ");
}
return 0;
}
int CharIsAt(char *pStr,char ch,int loc[],int mLoc){
//Searches for ch in *pStr by incrementing a pointer to access
//and compare each character in *pStr to ch.
int i,x;
for (i=0,x=0;i<mLoc;i++){
if (*(pStr+i)==ch){
//Stores index of ch's location to loc
loc[x]=i;
x++; //Increment for each time ch was counted in pStr
}
}
//Returns the number of times ch was found
return x;
}
J'inclus mon code entier si ce n'est pas trop ennuyeux, je peux essayer de faire une version plus simple du problème si cela pouvait aider. Je pensais que poster tout le code pourrait être plus utile pour répondre à la question.
Merci encore, bravo!
la fonction: 'getchar()' 'retourne en fait un int'. Par conséquent, la variable 'search' devrait être un' int' (entre autres choses, alors peut être vérifier pour 'EOF' et devrait vérifier '' \ n ' – user3629249
pour faciliter la lisibilité et la compréhension: 1) suivre l'axiome: * seulement une déclaration par ligne et (au plus) une déclaration de variable par déclaration. * – user3629249
le code affiché invite seulement l'utilisateur une fois pour une ligne d'entrée (et semble s'attendre à ce que l'utilisateur puisse 'lire le programme' savoir quand ils doivent entrer dans la ligne suivante à rechercher – user3629249