Pokaż wyniki 1 do 4 z 4

Temat: infinite loop

  1. #1
    Zarejestrowany
    Jan 2009
    Skąd
    /tmp
    Postów
    30

    Domyślnie infinite loop

    Zastanawialem sie ostatnio czemu feof() nie jest dobrym straznikiem petli i zaczalem odkrywac funkcje I/O na nowo, a taka ciekawostke wydobylem ostatnio :

    Kod:
    	int n;
    
    	while(1) {
    		printf("enter a number: ");
    		if(scanf("%d", &n) == 1)
    			break;
    		printf("try again: ");
    	}
    
    	printf("you typed %d\n", n);
    W wolnym tlumaczeniu chodzi tu o to ze funkcja scanf ma ustawiony znacznik formatowania na int, a co jesli odczyta char? No wlasnie, bedzie konflikt konwersji, ktory spowoduje brak przesuniecia po buforze danych. Czyli jesli zamiast 123 wprowadze abc, to bufor tkwil bedzie caly czas na znaku 'a' - a funkcja scanf() bedzie przekonana ze 'a' to dopiero co wprowadzona wartosc, ktora z racji tego ze jest bledna - bedzie musiala byc wprowadzona na nowo i znowu i znowu i znowu.. Tyle ze nikt nie bedzie mogl juz tej wartosci wprowadzic na nowo bo petla juz wczesniej 'poszla w tango'.

    Moze komus sie przyda.

    Pozdro.
    " Wszystko, co ma początek, ma też koniec. Widzę nadchodzący koniec. Widzę rozciągającą się ciemność. Widzę śmierć ."

  2. #2

    Domyślnie

    A jak dasz coś takiego
    ...........
    if(scanf("%c", &n) == '1')
    ...........
    to powinno działać
    Ostatnio edytowane przez Laik707 : 02-10-2009 - 17:39

  3. Domyślnie

    1 a nie '1' ;-)

  4. #4

    Domyślnie

    Moja koncepcja była zła, sprawdziłem i cofam poprzedni post.
    Ostatnio edytowane przez Laik707 : 02-11-2009 - 19:23

Podobne wątki

  1. Invalid loop locatin: /livecd.squash
    By marimarek in forum Linux
    Odpowiedzi: 0
    Autor: 07-18-2008, 10:10

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj