Премини към съдържанието
frozener

Порблем с низ

Препоръчан отговор


Здравейте, имам проблем с програма, която чете низ и ако има интервал да отпечата низа след интервала.

Ето какво съм написал досега:

#include <stdio.h>
#include <ctype.h>
int main()
{
    char *p;
    char str[80];

    printf("Enter a string:\n");
    gets(str);
    p = &str[0];

    while(*p){
		 if(*p == ' '){
		 *p++;
		 }
    }
   puts(str);

    return 0;
}
Моля помогнете.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Объркал си логиката на цикъла. Така направен, дори и един символ различен от интервал да има във въведения низ, цикълът ще върти до безкрайност, защото няма да какво да отмести указателя и ще се проверява една и съща стойност. Вместо това, трябва да увеличаваш стойността на указателя, докато не стигнеш интервал и да отпечаташ низа след него.

В твоя код звездичката в *p++; е излишна и не прави нищо, защото не ползваш стойността към която сочи p.

Отпечатваш str, а нищо направено до този момент не го е променило, т.е. дори цикълът отгоре да не беше безкраен, щеше да отпечата, каквото си въвел.

Какво ще кажеш за това:

#include <stdio.h>
#include <ctype.h>
int main()
{
	char *p;
	char str[80];

	printf("Enter a string:\n");
	gets(str);
	p = &str[0];

	while((*p) && (*p++ != ' '));

	puts(p);

	return 0;
}
Редактирано от flare (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Мисля, че обяснението ми беше ясно, но да го разбием: (забележи разликата между "стойността на p" и "стойността към която сочи p") ++ е с по-висок приоритет от *. Тоест *p++ е еквивалентно на *(p++). p++ връща като резултат стойността на p и после я увеличава с размера на char. След което * връща стойността, към която сочи p преди увеличението. И това е. Тази стойност очевидно не се ползва в твоя код.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Благодаря за помощта.


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.