Pierwszy scanf wczytuje tylko liczbę zmiennoprzecinkową, a pamiętaj, że tam jest również enter. Zostaje on w buforze i trafia do drugiego scanf. Możesz to sprawdzić debugując program lub - co jest bardziej popularne wśród początkujących - zrób wydruk zmiennej ch. Musisz wyczyścić bufor przed wykonaniem drugiego scanf: [syntax=c]fflush(stdin);[/syntax]
Chodzi o to, żebyś odczytał sobie wszystko jak leci z stdin, np. używając funkcji read(), fread() albo fgets() (tą ostatnią można polecić, całkiem wygodna). Następnie w buforze wykonujesz przetwarzanie wszystkich magicznych znaków które chcesz obsługiwać - np. '\b' - a potem na tym buforze wykonujesz funkcję sscanf(). Swoją drogą rozwiązaniem problemu...
scanf() nie działa - dlatego ponieważ funkcja ta nie wczytuje białych znaków, w tym znaku nowej linii (dla %d) i zostaje on w buforze. Żeby to ominąć trzeba napisać małą funkcję, która czyści bufor przed następnym scanf-em. Np. coś takiego: void flush( void ) { int c = 0; while( c != '\n' && c != EOF ) c = getchar();...
Bo kazales jej to robic - %s oznacza wczytan8ie do bufora napisu znakowego o dlugosci nie wiekszej niz rozmiar bufora - 1 jesli hcesz wczytac 3 slowa musisz zastosowac formant wycinajacy pojedyncze napisy ( poszukaj w manualu C bo nie pamietam teraz ktory to byl ) i wczytac go do trzech zmiennych np tak ( zakladajac ze poszukiwanym formantem jest m...
Jak dam %c to w ogóle program sie sypie. Pojawia się pytanie czy zapisać dane do pliku, program nie czeka na wpisanie (t/n) tylko od razu wyświetla napis naciśnij jakiś klawisz by zakończyć działanie programu. Mnie nic nie przekona, programowanie w C to porażka. Pamiętam jak kilka lat temu programowałem w Turbo Pascalu, tam wszystko co zgadzało się...
The getchar function reads a single character from the input stream using the _getkey function. The character read is then passed to the putchar function to be echoed. (...) The scanf function reads data using the getchar routine. Tyle jesli chodzi o opis z dokumentacji. Wynika z niej, ze echa nie mozna wylaczyc. Uzyj _getkey(). The _getkey function...
Witaj, Najpierw sam przetestuj kod- podstawowe bledy: -na gcc musialem dodac include <stdbool.h> - " " w include oznacza ze pliki naglowka znajduja sie w katalogu z aplikacja- zmien to na <> bo sa to standardowe pliki .h - masz nie zamknieta klamre w funkcji DodajOsobe, co powoduje blad - funkcja UsunOsobe nic nie zwraca (void), a pozniej...
Witam. Ucząc się C rozwiązuje zadania z książki S.Prata "Szkoła programowania: Język C" Czytając forum nie znalazłem wystarczającej odpowiedzi więc proszę o rozwinięcie następujących kwestii przedstawionych w książce: [syntax=c] int main(void) { char tablica[30]; int idx_end scanf("%s",tablica); idx_end = strlen(tablica); for(; idx_end>=0; idx_end--)...
Tak sprawdziłem 32 to spacja nie rozumiem czemu prosty warunek: [syntax=c] while(znak==32) { scanf("%s", znak); } [/syntax] nie dziala ? lub taki: [syntax=c] for(i=1;i<MAX;++i,++licznik1) { if(cyfry=='\n'&&cyfry==' ') break; scanf("%d", cyfry); } [/syntax] Zamiast scanf probowalem podmienic na getc, fgetc, getchar ale wywala jeden i ten sam...
Miałeś przeczytać manual do scanf(), link podawałem w poście powyżej... Eh lenistwo, lenistwo... ;) Scanf przestaje czytać wejście po napotkaniu pierwszego znaku, który "nie pasuje" do konwersji. W przypadku wywołania scanf("%79s", liczba); konwersja kończy się po napotkaniu pierwszego białego znaku - czyli najprawdopodobniej znaku...
Witam. Program nie dzialal, bo nadal bylo kilka bledow np. w wywolaniu funkcji scanf bylo znak zamiast &znak itp. Po co deklarowac zmienna "znak" jako tablice, a nie jako zwykla zmienna typu char? #include <stdio.h> int main(void) { char znak; char lancuch[30]; int i,zn; printf("Prosze podac znak: "); scanf("%1c", &znak); printf("A teraz...
Zmienna result nie może być wskaźnikiem bo scanf przez %s kopiuje zawartość źródła do zmiennej która siedzi pod %s. To znaczy może być wskaźnikiem ale musi wskazywać na jakiś obszar pamięci a nie na przypadkowe "gdzieś w pamięci". Dwa, że obszar trzeba zainicjować zerem w pierwszej komórce na wypadek gdyby scanf nie dopasował wzorca do rzeczywistych...
Zgadza się, funkcja przerywa działanie, ale w buforze nadal znajduje się znak, który trzeba odczytać. Trzeba opróżnić stdin, nie wiem jak to jest realizowane na mikrokontrolerach. Gdy funkcja napotka znak nie pasujący do wzorca wykonaj fflush(stdin), albo scanf("%c",&znak);
flushall nie jest funkcją należącą do standardu ANSI C. Ponadto nie zaleca się korzystania z niej ponieważ może wywoływać nie przewidziane działanie programu. Nie jest to dosłowny cytat tylko mój przekład. Jeśli kolega nie wierzy proszę poczytać trochę. Fakt scanf czeka na wprowadzenie znaku jednak to on powoduje problem. Wystarczy, zamienić [syntax=c]...
Szanowni Forumowicze, uruchomiłem sobie sprzętowego UARTa wykorzystując bibliotekę ze strony atmela. Wszystko działa, łączę się z terminalem na komputerze, wyświetla się to co powinno. Dodałem też funkcję do wysyłania całego łańcucha znaków wykorzystując wskaźnik, gdyż w atmelowskiej bibliotece znalazłem jedynie do wysyłania konkretnych pojedynczych...
A jaki to ma sens, bo ja nie widzę tutaj na razie żadnego. Konkretnie w kodzie, to mam na myśli. liczba to funkcja, a Ty próbujesz wczytać do niej ciąg jako inta z konsoli. Czy to się w ogóle kompiluje? Chodziło Ci chyba o scanf ("%lu", &p); %d to int ze znakiem %u to int bez znaku (unsigned) modyfikator l oznacza typ long czyli...
Witam, "zły nauczyciel kazał mi" napisać prosty program szyfrujący. Wybrałem szyfr rot 13. Polega on na tym, że po wpisaniu tekstu szyfr "podstawia" litery z alfabetu łacińskiego na litery z tegoż alfabetu przesunięte o 13 miejsc w prawo. Np. dla litery 'a' podstawia 'n' itd. Mój program ma w sobie 2 tablice z alfabetem, z których jedna (podstaw) jest...
(at)szelus "Mógłbyś podsłuchiwać własną transmisję... " Mogę, tyle że oscyloskopem bez pamięci, który w dodatku śmieci na linii... :-( Jak dla mnie nadawał się tylko do testowania ogólnego stanu linii (przydźwięk i czy coś leci, jak to wygląda - stabilnie czy nie, i tylko przy ciągłym wysyłaniu tego samego znaku przez ATMEGĘ, np. 0xFF, 0xAA, 0x55 i...
Cześć Chciałbym rozwiązać następujący problem z programowania w C (poziom początkującego): Muszę pobrać od użytkownika 4-cyfrową liczbę np 1234, następnie podzielić ją na 4 oddzielne cyfry, do każdej cyfry dodać 2, połączyć cyfry z powrotem w jedną liczbę i wyświetlić na ekranie. Jak to zrobić? Z wyszukiwarki wyszło mi że można tą liczbę pobrać jako...
Scanf zwraca numer wpisanych znaków, wiec zrob coś takiego x = scanf("%c", &s); for(a=0;a<x;a++); Pozdrawiam
Witam. Generalnie mam problem z komunikacją pomiędzy LPC2148 a AD7794 przy użyciu SPI. Wynik komunikacji wysyłam poprzez UART na terminal i otrzymuję dziwne wartości. Praktycznie takie same efekty mam przy użyciu SPI na portach P0.4 SCK, P0.5 MISO, P0.6 MOSI, P0.7 CS, jak i skonfigurowanym SSP na portach P0.17 SCK, P0.18 MISO, P0.19 MOSI, P0.20 CS....
dejmos , kolega zapędził sie z nawiasami, poprawiłem to i dodałem warunke wyjścia z while. Pozdrawiam
Witam, nie chce mi się tego sprawdzać, ale zakładam, że "scanf("%c", &symbol)" czyta jeden znak, a "4" i "Enter" to co najmniej dwa znaki. Policz przy wpisywaniu. Pozdrawiam.
scanf zwraca w wyniku ilość poprawnie wprowadzonych danych, np: double liczba1; int wynik; wynik=scanf("%lf",&liczba&... w zmiennej wynik będzie wartość 1 jeżeli scanf poprawnie odczyta liczbe, lub 0, jeżeli tego nie zrobi, a np. w takim przypadku: scnanf("%lf%c%lf",&liczba1... scanf zwroci 0,1,2, lub 3....
Dodaj [syntax=c]scanf("%c",&x);[/syntax] po bloku instrukcji switch - scanf odczytuje ci i klawisz (1,2,3) i znak ENTER
Jeszcze jeden błąd zrobiłeś, w scanf. Pamiętaj, że nazwa tablicy jest adresem na pierwszy element. [syntax=c]#include <stdio.h> #include <stdlib.h> int main() { int A; char b[1000]; printf("A: "); scanf("%999s", b); // wczyta tylko 999 znaków żeby nie wyjść poza tablicę (tysięczny - ostatni - znak to NULL) A = atoi(b); printf("[%d]\n", A);...
Prawie nie do zrealizowania samym scanf. Moesz co prawda napisac wasną funkcję obsługi stdio ale problem jest że nie wpływa to na przerwanie sscanf. Jest to generalnie ciężko obejść jako że nie ma zaimplementowanej funkcji select np. Musisz czytać własnymi funkcjami uarta i pisac do bufora - kiedy bufor jest pełny (tzn np osiągnie odpowiednią ilość...
if ((x >= '65') && (x <= '90')) { Dwie sprawy: 1. Nie jesteś w Pascalu więc nawiasy przy warunkach są zbędne. 2. Zapis w pojedynczym apostrofie dotyczy pojedynczego znaku więc piszemy np. 'a', 'b', ..., 'z' itp. dwa znaki występują tylko przy znakach specjalnych np. '\n' - znak końca linii. scanf ("%c", &x); Od kiedy w ten sposób...
Jak uniemożliwić wprowadzenie liter do zmiennej float? Najprościej - pobieraj znaki pojedynczo i filtruj tylko to, co chcesz żeby było dozwolone. Przy okazji rozwiążesz słynny problem kropki/przecinka. Jednak podany tekst wyświetlany jest tylko do spacji. Związane jest to z działaniem funkcji scanf - poczytaj dokładnie jak się ona zachowuje (jak są...
(at)assassin90 - sprawdź dokładnie jaka jest specyfikacja programu i co ma robić w przypadku, gdy na wejściu pojawią się nieprawidłowe dane, takie jak: * puste wiersze * zbyt długie liczby * kilka liczb w wierszu * śmieci Zwykle najprostsze podejście jest najlepsze, typu: bool isOk = true; while (isOk) { char digitString[65]; int...
scanf("%d\n",&y); Po co Ci znak końca linii w scanf? z=+y; W C# można tak z+=y; ale nie słyszałem o takim zapisie jak u ciebie... Teraz jeśli pętla byłaby dobrze napisana to maksymalnie możesz dodać 10 liczb. hmmm... ja widzę w kodzie komentarz: Sumowanie 10 kolejnych liczb wpisywanych przez uzytkownika
[syntax=c]#include <stdio.h> #include <math.h> #include <stdlib.h> int main (){ int x=0,y=0,s=0; float w=0; char znak[10]; printf("Podaj liczbe x \n"); scanf("%i",&x); printf("Podaj liczbe y \n"); scanf("%i",&y); printf("Podaj znak \n"); scanf("%s", &znak); switch (znak[0]){ case 'g': s=x+y; printf("Suma wprowadzonych liczb...
Mam taki program: #include<stdio.h> int main(void) { int x; char str[10],znak; printf("Podaj jakis znak\n"); scanf("%d",&x); printf("Ten znak to %d !!!\n",x); printf("Nacisnij jakis klawisz by wyjsc\n"); scanf("%c",&znak); return...
Problem rozwiązany. Zapomniałem o wczytaniu drugiego znaku. Rozwiązanie: scanf("%c %c",&znak1,&znak2);
najpierw trzeba pobrać łańcuch (text), czyli jakiś scanf("%s", str) potem sprawdzamy, czy pasuje do wzorca (w int n; float x; n=scanf("%f", &x); if(n<>1) printf("kaszanka\n"); Większość programistów, z tego co zauważyłem, nie sprawdza wartości zwracanej przez scanf, a to nie dobrze, bo scanf zwraca...
Najpierw scanf() ale do łańcucha znaków (tablica char), a potem na tym łańcuchu porównanie z "n" i jeżeli się zgadza, to wyjście, a jeżeli nie, to można użyć konwersji z łańcucha na liczbę. Na przykład za pomocą atoi() z stdlib.h , z tym że tego nie ma chyba w ANSI C, ale jest w ISO. Można też od biedy zrobić sscanf() na tym łańcuchu, ale to mniej wydajne.
Sprawa jest prosta - scanf("%c", &c) wczytuje pojedynczy znak, ale pozostaje Ci jeszcze w buforze stdin nieskonsumowany znak końca wiersza. Ten zostaje przechwycony przez kolejne wywołanie scanf(...). Sprawa wczytywania z konsoli jest dodatkowo skomplikowana przez buforowanie w trybie liniowym, oraz przez nie zawsze pożądane pomijanie białych znaków...
Witam Mam taki prosty kod: [syntax=cpp]#include <conio.h> #include <iostream> #include <locale.h> #include <string> using namespace std; int main() { setlocale(LC_ALL, "Polish"); string str; getline(cin, str); cout << str << endl; _getch(); return 0; }[/syntax] I takie pytanie: Dlaczego po wywołaniu setlocale cout/printf...
Zwraca :P [syntax=c] #include<conio.h> #include<stdio.h> #include<ctype.h> #include<stdlib.h> unsigned char tablica[50]; int znaki; char pusty; int losuj(int a) { for(int i=0;i<a;i++) { unsigned char litery = 'A' +( rand() %( 'Z' - 'A' ) ) +1; tablica[i] = litery; } return 0; } int main(void) { printf("Podaj ilosc losowanych...
Źle mnie rozumiesz... jeśli podasz 0 to X będzie miało wartość równą kodowi ASCII *znaku* 0 rzutowaną na int (bo char to byte a nie int). scanf() jest poleceniem języka ANSI-C choć po przemyśleniu - zachowa się tak samo jak cin... Jeśli chodzi o to zapętlanie się to jest chyba jakiś feler w Dev-Cpp, nie powinno się tak robić. P.S. Nie obraź się ale...
scanf("%c", jedynie jeden znak.
Nie mam czasu tego sprawdzić, ale chyba chodzi o to, że w strumieniu pozostaje niewyciągnięty znak końca linii. Dodanie cin.ignore() załatwi sprawę: cin >> cnt; // (lub scanf, też nie działa) cin.ignore(numeric_limits<streams... '\n' ); Instrukcja wyciąga ze strumienia i ignoruje tyle znaków, ile...
Witam, Po pierwsze - kod umieszczamy (z poprawnymi wcięciami) w znacznikach [code]. Po drugie, funkcji gets() nie uzywamy, ponieważ nie pozwala ona uniknąć potencjalnego przepełnieniem bufora - nowsze kompilatory nawet o tym ostrzegają. Zamiast tego można wykorzystać fgets(). Po trzecie, czytamy manual. A w manualu jest napisane, że scanf() kończy czytanie...
Jak to sie dzieje? Zostaje zwrócona wartość nieokreślona, która mocno zależy od wykonywanego kodu oraz kompilatora. Tym samym rodzi się pytanie czy EOF jest jakoś specjalnie traktowany? EOF nie jest znakiem, oznacza koniec danych, więc nie może zostać zwrócony do bufora wejściowego - scanf napotkawszy EOF kończy działanie (choć to też zależy od kompilatora)...
Witam! listing nr 1: deklaracja: data_ur data_ur1 nie dość, że deklaracja występuje PO instrukcji zamiast przed nią, to jeszcze jest błąd w nazwie typu. (Czyżby to w ogóle się skompilowało bez uwag czy błędów?) Zamiast: [syntax=c]int main(void) { printf("struktury\n" data_ur data_ur1; ... ... ... }[/syntax] powinno być: [syntax=c]int main(void) { struct...
Do porównywania napisów służy funkcja strcmp: [syntax=c]#include<stdio.h> #include<string.h> int main() { char tekst[10]; printf("wpisz stop \n"); scanf_s("%s", tekst, sizeof(tekst)); if (strcmp(tekst, "stop")==0) { printf("ok"); } else { printf("not ok"); } return 0; }[/syntax] PS. W kodzie nigdy nie powinieneś robić powtórzeń
Po prostu po pierwszym scanf-ie pozostaje znak nowej linii w buforze. Kolejny fgets czyta pusta linie. Może wypisuj to, co wczytujesz za każdym razem. Operacja fflush(stdin) nie jest zdefiniowana przez standard.
chcialem to wstawic do mojego programu ale co mi nie chce zadzialac?? widzi ktos tu jakis blad?? #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf ("**************************************... printf ("**************************************... printf ("********************...
Hej mam problem , napisałem prosty kalkulator w c i mi źle liczy: przy dodawaniu odejmuje, odejmowanie dobrze liczy , przy mnożeniu zawsze wychodzi 0, przy dzieleniu zawsze wychodzi 1, nie mam pojęcia co jest grane, pomóżcie proszę A oto kod: #include<stdio.h> #include <stdlib.h> int main() { int a,b,c,znak; printf("podaj...
Czy źródła newliba są te same co linaro? Czy dodałeś jakieś łatki od siebie? Bo tak w ogóle to wiesz czemu znak "\b" zawiesza scanf()? Wszystko inne działa, a jak wcisnę backspace, to w ogóle już nie wchodzi do _read() i scanf() wisi.
printf scanf scanf spacja klawiatura scanf
youtube telefon tranzystory mj11015 ecl82 wzmacniacz
bateria parkside sluchawki nauszne regulator glosnosci
Dioda temperatury świeci w piekarniku Electrolux - przyczyny i rozwiązania Uszczelka do anteny dachowej Opel Vectra C z GPS