Как зациклить мою программу? То есть, если пользователь хочет повторить программу и ввести другую строку
Программа заключается в том, чтобы в строчке поменять слова. Но при попытке сделать зацикливание, при втором прогоне чаровский массив stroka становится "\n" тем самым просто не давая заполнить его.
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <Windows.h>
#include <ctype.h>
char* zam(char zamena[20], int len)
{
for (int i = 0; i < len + 1; i++)
{
zamena[len - i] = zamena[len - 1 - i];
}
zamena[0] = '(';
zamena[len + 1] = ')';
zamena[len + 2] = 0;
return zamena;
}
char* reg(char mas[255], int len)
{
setlocale(LC_ALL, "");
for (int i = 0; i < len + 1; i++)
{
mas[i]=tolower(mas[i]);
}
return mas;
}
char* arr(char mas[255][10],char slovo[20],char zamena[20], int word_count)
{
int len;
int len1 = strlen(zamena);
char name[255][10];
for (int i = 0; i < word_count; i++)
{
len = strlen(mas[i]);
if (mas[i][len - 1] == '.')
{
mas[i][len - 1] = 0;
len = strlen(mas[i]);
strcpy(name[i], mas[i]);
if (strcmp(reg(mas[i], len), slovo) == 0)
{
printf("(%s). ", name[i]);
zamena[len1] = '.';
zamena[len1 + 1] = 0;
strcpy(mas[i], zamena);
}
else
{
name[i][len] = '.';
name[i][len + 1] = 0;
strcpy(mas[i], name[i]);
printf("%s ", mas[i]);
}
zamena[len1] = 0;
}
else if (mas[i][len - 1] == ',')
{
mas[i][len - 1] = 0;
len = strlen(mas[i]);
strcpy(name[i], mas[i]);
if (strcmp(reg(mas[i], len), slovo) == 0)
{
printf("(%s), ", name[i]);
zamena[len1] = ',';
zamena[len1 + 1] = 0;
strcpy(mas[i], zamena);
}
else
{
name[i][len] = ',';
name[i][len + 1] = 0;
strcpy(mas[i], name[i]);
printf("%s ", mas[i]);
}
zamena[len1] = 0;
}
else
{
len = strlen(mas[i]);
strcpy(name[i], mas[i]);
if (strcmp(reg(mas[i], len), slovo) == 0)
{
printf("(%s) ", name[i]);
strcpy(mas[i], zamena);
}
else
{
strcpy(mas[i], name[i]);
printf("%s ", mas[i]);
}
}
}
return *mas;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char* tmp;
char mas[255][10];
char slovo[20];
char zamena[20];
char stroka[255];
int q, len, word_count = 0;
while (true)
{
printf("Введите строку:\n");
fgets(stroka, 255, stdin);
len = strlen(stroka);
stroka[len - 1] = 0;
printf("Введите слово, которое нужно заменить:\n");
fgets(slovo, 20, stdin);
len = strlen(slovo);
slovo[len - 1] = 0;
reg(slovo, len);
printf("Введите слово на которое надо заменить:\n");
fgets(zamena, 20, stdin);
len = strlen(zamena);
zamena[len - 1] = 0;
len -= 1;
zam(zamena, len);
tmp = strtok(stroka, " ");
for (int i = 0; tmp != NULL; i++)
{
strcpy(mas[i], tmp);
tmp = strtok(NULL, " ");
word_count++;
}
printf("Ваша строка:\n");
arr(mas, slovo, zamena, word_count);
printf("\nИзменённая строка:\n");
for (int i = 0; i < word_count; i++)
{
printf("%s ", mas[i]);
}
word_count = 0;
printf("\nЕсли хотите ввести повторить операцию и ввести другую строку введите 1, иначе введите 0\n");
scanf("%d", &q);
getchar();
if (q==0)
break;
}
}
Ответы (2 шт):
Автор решения: Lem0nti
→ Ссылка
Вероятно, вам нужно что-то такое
while (true)
{
printf("Введите строку:\n");
...
for (int i = 0; i < word_count; i++)
printf("%s ", mas[i]);
//printf("\nЕсли хотите ввести другую строку введите 1 иначе 0\n");
//if (0)
// break;
}
Автор решения: Alex8608
→ Ссылка
Оказалось что fgets считывал \n после scanf(). Нужно добавить после scanf() getchar() тем самым всё заработает.