Откуда в конце лишние символы(2 шт)?

Есть код, там есть 2 принта, для наглядности проблемы, почему-то строка, состоящая из 9 символов не заканчивается, а продолжает работу в цикле while, то есть на 10 и 11 элементе
//Lab 8

#include "stdafx.h"
#include <stdio.h>
#include <locale.h>

int string_research(char *str, int &i, char *word){

	int amount = 0;

	while (str[i] != '\n' && str[i] != '\0' && str[i] != ' ') {
		word[amount] = str[i];
		i++;
		amount++;
	}
	word[amount] = 0;

	return amount;

}

int main() {

	setlocale(LC_ALL, "rus");

	int i = 0, a = 0, b = 0, temp, amount_word = 0, min_length = 32, max_length = 0;
	char str[256], word[32], min_word[32], max_word[32];

	FILE * fp = fopen("input.txt", "r");

	if (fp != NULL) {
		while (fgets(str, 256, fp) != NULL) {

			while (str[i] != '\0') {

				printf("\n\n\n%c\n\n\n\n", str[10]);
				printf("\n\n\n%c\n\n\n\n", str[11]);

				temp = string_research(str, i, word);

				if (temp < min_length) {

					min_length = temp;

					while (word[a]) {
						min_word[a] = word[a];
						a++;
					}
					min_word[a] = 0;

					if (min_length > max_length) {
						while (min_word[b]) {
							max_word[b] = min_word[b];
							b++;
						}
						max_word[a] = 0;
						max_length = min_length;
					}
					amount_word++;

				}else if (temp > max_length) {

					max_length = temp;
					while (word[a]) {
						max_word[a] = word[a];
						a++;
					}
					max_word[a] = 0;
					amount_word++;

				}else if (temp == min_length || temp == max_length) amount_word++;

				a = 0;
				i++;
			}
			i = 0;
		}
	}
	fclose(fp);

	printf("\nКол-во слов = %i\n", amount_word);
	printf("\nМин. длина = %i\n", min_length);
	printf("Слово: %s\n", min_word);
	printf("\nМакс. длина = %i\n", max_length);
	printf("Слово: %s\n", max_word);

	getchar();
	return 0;
}

Получается ошибка
5ba3e63276847084790071.png
А должно быть:
'мин. длина' = 3
'Слово': red

исх. файл выглядит так:
5ba3e6d442d89440635087.png
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
string_research заканчивает работу на символе '\0', в i остаётся индекс этого символа. Но в конце цикла while (str[i] != '\0') стоит i++, который продвигает i дальше конца строки. Чтобы работало можно исправить i++ на if (str[i]) i++;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы