Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Cabalerio

[C] Crash przy wczytywaniu zmiennej warunku pętli do while

Rekomendowane odpowiedzi

Może mi ktoś wyjaśnić dlaczego taki programik się crash'uje jak wpisuje literę 'n' ?

#include <stdio.h>
#include <stdlib.h>

int main() {
char literka;
do 
	printf("Wpisz literke. n = koniec\n");
	scanf("%s", &literka);
	printf("%s\n", literka);
} while (literka != 'n');
system("PAUSE");
return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po "do" nie dales klamerki "{". W ogole ten program jakis dziwny, jaki jest jego cel?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ok dzieki. To był program napisany po to, żebym zrozumiał co naprawić w tym programie:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
float a = 0, b = 0, c = 0, delta = 0, x1 = 0, x2 = 0;
char ponownie; //odpowiedz na pytanie czy ponowic wpisywanie
do {
	//system("CLS");
	a = 0;
	b = 0;
	c = 0;
	x1 = 0;
	x2 = 0;
	printf("Wpisz wspolczynniki funkcji kwadratowej wedlug wzoru (x^2 x w.wolny).\n");
	scanf_s("%4f %4f %4f", &a, &b, &c);
	if(a != 0) {
		delta = pow(b, 2) - 4 * a * c;
		printf("Delta wynosi:%4f\n", delta);
		if(delta > 0) {
			x1 = (-b - sqrt(delta)) / (2 * a);
			x2 = (-b + sqrt(delta)) / (2 * a);
			printf("Miejscami zerowymi sa x = %4.2f i x = %4.2f\n", x1, x2);
		}
		else if(delta == 0) {
			x1 = (-b) / (2 * a);
			printf("Podwojnym miejscem zerowym jest x = %4.2f\n", x1);
		}
		else {
			printf("W podanej funkcji kwadratowej wyznacznik delta jest mniejszy od zera\n");
		}
	}
	else {
	printf("Wpisano wzor funkcji liniowej.\n");
	}
	printf("Wpisac ponownie wspolczynniki ?(t/n)\n");
	scanf("%c", &ponownie);
	printf("%c\n", ponownie);
} while(ponownie != 'n');
system("PAUSE");
return 0;
}

 

Mianowicie ten program w ogolę nie chce dać możliwości wpisania czy się chce kontynuować czy nie. Od razu przechodzi do powtórzenia pętli.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie wiem dlaczego program nie pobiera znaku z sdin ale wystarczy dodać jednego getchar() przed wczytaniem odpowiedzi.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main() {
float a = 0, b = 0, c = 0, delta = 0, x1 = 0, x2 = 0;
char ponownie; //odpowiedz na pytanie czy ponowic wpisywanie
do {
	//system("CLS");
	a = 0;
	b = 0;
	c = 0;
	x1 = 0;
	x2 = 0;

	printf("Wpisz wspolczynniki funkcji kwadratowej wedlug wzoru (x^2 x w.wolny).\n");
	scanf("%4f %4f %4f", &a, &b, &c);

	if(a != 0) {
		delta = pow(b, 2) - 4 * a * c;
		printf("Delta wynosi:%4f\n", delta);

		if(delta > 0) {
			x1 = (-b - sqrt(delta)) / (2 * a);
			x2 = (-b + sqrt(delta)) / (2 * a);
			printf("Miejscami zerowymi sa x = %4.2f i x = %4.2f\n", x1, x2);
		}

		else if(delta == 0) {
			x1 = (-b) / (2 * a);
			printf("Podwojnym miejscem zerowym jest x = %4.2f\n", x1);
		}

		else
		{
			printf("W podanej funkcji kwadratowej wyznacznik delta jest mniejszy od zera\n");
		}
	}
	else {
	printf("Wpisano wzor funkcji liniowej.\n");
	}

	printf("Wpisac ponownie wspolczynniki ?(t/n)\n");
	getchar();
	scanf("%c", &ponownie);

} while(ponownie != 'n');

system("PAUSE");
return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki szasza. To rozwiązało problem, aczkolwiek to w ogóle nie jest logiczne. Jak by ktoś wiedział dlaczego tak jest to niech napisze. Wolałbym wiedzieć takie niuanse. :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzieje się tak poniewaz wpisujesz 3 liczby i naciskasz przycisk enter. Pierwsza liczba jest przypisana zmiennej a, druga zmiennej b, a trzecia zmiennej c. Jednak przycisk enter nie zostaje pobrany z bufora i czeka sobie tam, aż do napotkania kolejnej funkcji scanf(), ktora w Twoim programie znajduje sie na koncu petli. Jak to sie stanie enter zostaje przypisany zmiennej ponownie (czyli "enter" jest rozne od "n"), a wiec program ponawia petle nie pytajac o Twoja zgode. Aby funkcja scanf() pominela znak enter i pozwolila Ci wpisac wybor czy zakonczyc petle czy nie zrob zamiast scanf("%c, &ponownie) tak

scanf(" %c, &ponownie). Wtedy juz niepotrzebna Ci bedzie funkcja getchar().

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...