[C] Komunikat błędu przy wpisaniu litery

restqq
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 5 gru 2014, o 13:26
Płeć: Mężczyzna
Lokalizacja: Łomża
Podziękował: 6 razy

[C] Komunikat błędu przy wpisaniu litery

Post autor: restqq »

Witam, miałem za zadanie napisać program który oblicza sumę liczb nie parzystych wprowadzonych przez użytkownika, jakoś sobie z tym poradziłem niestety nie wiem co zrobić aby wyświetlił się błąd gdy użytkownik wpisze inny znak niż liczbę, powinien wyskoczyć komunikat że został wprowadzony zły znak i powtarzać się gdy użytkownik dalej będzie próbował wpisać inny znak niż liczbę ale gdy już wpiszę tą liczbę to program powinien dalej kontynuować obliczenia, proszę o pomoc.

Tutaj program:

Kod: Zaznacz cały

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

int main(int argc, char *argv[])

{
int i;
int t[10]={0};
int suma=0;


printf("Wprowadz cyfre:
");

for (i=0; i<9; i++)
{

scanf ("%d",&t[i]);
if(t[i]%2!=0) suma+=t[i];

}

if (scanf("%d",&t[i])==1)

{
printf("Liczby ktore wprowadziles : %d %d %d %d %d %d %d %d %d %d  

",t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9]);

printf("Suma liczb nieparzystych wynosi: %d
 ",suma);
}
else
printf("Zly znak");


  system("PAUSE");
  return 0;
}
Gouranga
Użytkownik
Użytkownik
Posty: 1591
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[C] Komunikat błędu przy wpisaniu litery

Post autor: Gouranga »

tragedia nie kod
wpisałeś argc i argv chociaż nie używasz ich w ogóle
tablice wypisuje się w pętli a nie %d %d %d ...
dlaczego zakładasz, że użytkownik wprowadzi tylko 9 liczb?

napisz ten kod jeszcze raz ale tak jak powinien, wtedy się zajmiemy błedami
restqq
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 5 gru 2014, o 13:26
Płeć: Mężczyzna
Lokalizacja: Łomża
Podziękował: 6 razy

[C] Komunikat błędu przy wpisaniu litery

Post autor: restqq »

Doszedłem do czegoś takiego:

Kod: Zaznacz cały

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

int main(int argc, char *argv[])

{
int i;
int t[10]={0};
int suma=0;


printf("Wprowadz cyfre:\n");

for (i=0; i<10; i++)
{
while(scanf("%d", &t[i]) != 1) 
{
  printf("Nieodpowiedni znak!\n");
  int c;
  while((c = getchar()) != '\n' && c != EOF); 

scanf ("%d",&t[i]);
if(t[i]%2!=0) suma+=t[i];

}

}
printf("Liczby ktore wprowadziles : %d %d %d %d %d %d %d %d %d %d  \n" ,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9]);

printf("Suma liczb nieparzystych wynosi: %d\n ",suma);




  system("PAUSE");
  return 0;
}
Wiem że kod do najlepszych nie należy, teraz tak, wpisuję 10 liczb wyświetla mi te liczby ale suma równa się 0, o co chodzi?
Gouranga
Użytkownik
Użytkownik
Posty: 1591
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[C] Komunikat błędu przy wpisaniu litery

Post autor: Gouranga »

teraz to już w ogóle nie wiadomo co się tu dzieje...

Kod: Zaznacz cały

#include <stdio.h>

int main(void){
  int n;
  printf("Podaj ilosc liczb: ");
  scanf("%i", &n);
  int i,t,suma=0;
  for (i=0; i<n; i++){
    printf("podaj liczbe: ");
    while (scanf("%i", &t) != 1){
      printf("musisz podac liczbe
");
    }
    suma = t%2 == 1 ? suma+t : suma;
  }
  printf("suma nieparzystych: %i
", suma);
return 0;
}
przeanalizuj to
restqq
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 5 gru 2014, o 13:26
Płeć: Mężczyzna
Lokalizacja: Łomża
Podziękował: 6 razy

[C] Komunikat błędu przy wpisaniu litery

Post autor: restqq »

Zapomniałem napisać, z góry mam narzucone że wprowadzamy tylko 10 liczb, co tam robi znak zapytania? Liczby są wprowadzane do tablicy

-- 29 sty 2015, o 14:24 --

Rozumiem sam na początku zrobiłem to bez tablic ale narzucił mi żeby w zadaniu liczby zapisywały się do tablicy, w dodatku gdy wpiszę inny znak niż liczbę to komunikat ciągnie się w nieskończoność

EDIT: Doszedłem do czegoś takiego i chyba wszystko jest w porządku możecie rzucić okiem?

Kod: Zaznacz cały

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

int main(int argc, char *argv[])

{
int i;
int t[10]={0};
int suma=0;


printf("Wprowadz cyfre:\n");


for (i=0; i<10; i++)
{
while(scanf("%d", &t[i]) != 1) 
{
  printf("Nieodpowiedni znak!\n");
  int c;
  while((c = getchar()) != '\n' && c != EOF); 

}
suma = t[i]%2 == 1 ? suma+t[i] : suma;
}


printf("Liczby ktore wprowadziles : %d %d %d %d %d %d %d %d %d %d  \n" ,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9]);

printf("Suma liczb nieparzystych wynosi: %d\n ",suma);




  system("PAUSE");
  return 0;
}
Awatar użytkownika
Kacperdev
Użytkownik
Użytkownik
Posty: 3260
Rejestracja: 23 mar 2010, o 19:19
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 17 razy
Pomógł: 686 razy

[C] Komunikat błędu przy wpisaniu litery

Post autor: Kacperdev »

Kolega Gouranga, zapomniał o

Kod: Zaznacz cały

fflush(stdin);
który czysci bufor. Należy go wrzucić do pętli, wtedy wszystko gra.

Kod: Zaznacz cały

printf("Liczby ktore wprowadziles : %d %d %d %d %d %d %d %d %d %d  
" ,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9]);
tragedia. Takie rzeczy załatwia się w pętli. Właśnie dlatego powołuje się tablice by wszystkiego nie wypisywać.

Kod: Zaznacz cały

printf("Liczby które wprowadziłeś: ")
for(i=0;i<10;++i)
{
    printf("%i ", t[i]);
}
nie prościej?
restqq
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 5 gru 2014, o 13:26
Płeć: Mężczyzna
Lokalizacja: Łomża
Podziękował: 6 razy

[C] Komunikat błędu przy wpisaniu litery

Post autor: restqq »

Dzięki wielkie za pomoc panowie, wszystko gra
Gouranga
Użytkownik
Użytkownik
Posty: 1591
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[C] Komunikat błędu przy wpisaniu litery

Post autor: Gouranga »

Kacperdev, dzięki, zawsze jak piszę kod z palca to fflush mi ucieka gdzieś, dopiero przy kompilacji sobie przypominam

restqq, ta konstrukcja ze znakiem zapytania to taki mocno uproszczony if
ODPOWIEDZ