User Tools

Site Tools


dydaktyka:cprog:faq

This is an old revision of the document!


FAQ

Podczas budowania programu otrzymuję błąd "ld.exe||cannot open output file bin\Debug\[...].exe Permission denied|" - co robić?

Spróbuj wyczyścić projekt (wybierz z menu Build → Clean) i zbudować go ponownie.

:!: Czyszczenie projektu powoduje usunięcie wszystkich plików z folderu bin\Debug! Upewnij się, że nie zależy Ci na poprzedniej wersji pliku .exe :-)

Funkcja scanf() nie czeka na wpisanie przeze mnie danych

W pewnych sytuacjach może zdarzyć się, że funkcja scanf() pobierze dane “automatycznie” – z pozoru nie czekając na wpisanie czegoś przez użytkownika.

Aby zobaczyć, o co chodzi, uruchom poniższy program i postępuj zgodnie z jego poleceniami:

buffer_problem.c
#include <stdio.h>
 
int main()
{
    int n;
    char c;
 
    printf("Podaj liczbe calkowita i nacisnij <ENTER>: ");
    scanf("%d", &n);
 
    printf("Napisz jeden znak i nacisnij <ENTER>: ");
    scanf("%c", &c);
 
    printf("\n\n");
    printf("Wpisana liczba: %d\n", n);
    printf("Wpisany znak: %c (ASCII = %d)\n", c, c);
 
    return 0;
}

Co zostało wypisane? Jakiemu znakowi odpowiada wyświetlony kod ASCII? Jak sądzisz, dlaczego tak się stało?

Odpowiedź brzmi: Gdy użytkownik wpisuje dane na klawiaturze i wciska klawisz ENTER, dane umieszczane są w buforze – takiej “przechowalni bagażu”. Dopiero z tego miejsca są odczytywane przez funkcję scanf(), przy czym funkcja ta odczytuje (i usuwa z bufora) tylko tyle danych, ile potrzebuje. W tym przypadku po wpisaniu 5 i naciśnięciu ENTER w buforze umieszczane są dwa znaki – 5 oraz \n (odpowiadający ENTER-owi). Pierwsze wywołanie funkcji scanf() oczekuje liczby, zatem odczytuje (i usuwa z bufora) znak 5, ale pozostawia znak \n. Drugie wywołanie scanf() oczekuje znaku i… znajduje go – to ten pozostały w buforze znak nowej linii! Jednym ze sposobów na rozwiązanie tego problemu jest umieszczenie po pierwszym wywołaniu scanf() takiej instrukcji, korzystającej z funkcji getchar():

while (getchar() != '\n');

Dlaczego debugger nie zatrzymuje się na breakpointach?

Problem może być spowodowany spacjami w ścieżce do projektu (zobacz tu).

dydaktyka/cprog/faq.1444999165.txt.gz · Last modified: 2020/03/25 11:46 (external edit)