Цикл while не продолжается как положено
По какой-то причине цикл while в main заканчивается, когда я ввожу символ для поиска, но вы хотите, чтобы вы могли ввести строку, а затем символ для поиска, пока вы не введете пустую строку (ничего не вводите). По сути, я хотел бы сделать шаг 1 и шаг 2 бесконечно, пока я ничего не наберу и не нажму Enter. Почему это не работает? Спасибо всем за помощь!
Кроме того, небольшой побочный вопрос, как мне убрать мусор после ввода символа для поиска?
#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;
}
Я включил весь свой код, если это не слишком раздражает, я могу попытаться сделать более простую версию проблемы, если это поможет. Я подумал, что размещение всего кода может быть более полезным для ответа на вопрос.
Еще раз спасибо, ура!
2 ответа
while (fgets(array,SIZE, stdin)!=NULL && array[0]!='\n'){
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]);
if (fgets(array,SIZE, stdin)==NULL) break;
}
return 0;
Это должно работать
Основная проблема с размещенным кодом заключается в том, что пользователь должен был нажать enter
чтобы получить search
персонаж в программу. Тем не менее, призыв к getchar()
потребляет только один символ, поэтому он не использует последовательность новой строки.
Чтобы решить эту проблему, позвоните getchar()
в цикле, пока символ не будет либо EOF, либо '\n', чтобы очистить stdin
любого / всего остатка мусора.
Затем вернитесь к началу цикла