ANSI C - konwersja tablicy znakow na liczby
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
ANSI C - konwersja tablicy znakow na liczby
Ten twoj kod dziala mi dobrze :/ Masz moj programik. Troche dlugi i nie wiem czy sie polapiesz:
Kod: Zaznacz cały
#include <stdio.h>
#include <ctype.h> //isspace, itd
#include <stdlib.h> //atof
#define n 30
int coto(char *tab,int element);
//1 - cyfra; 2- litera j; 10 -cos innego(blad); 0 - koniec tablicy
int main()
{
char liczba[n];
char Re[n],Im[n];
int stan=1; //1 - czesc Re; 2- czesc Im; 0- koniec -1 - blad
int blad=-1; //miejsce bledu w liczbie; -1 - brak
int i=0,j=0;
memset(liczba, 0, n);
memset(Re,0,n);
memset(Im, 0, n);
printf("Liczba: ");
scanf("%s",liczba);
while(stan!=-1 && stan!=0) //az koniec albo blad
{
printf("i: %d\tstan: %d\t liczba: %c\tcoto[i]: %d\n",i,stan,liczba[i],coto(liczba,i));
switch (coto(liczba,i)) //co jest w polu tablicy
{
case 0: stan=0; break; //0 - koniec tablicy
case 1: //1 - liczba
if(stan==1) Re[i]=liczba[i];
if(stan==2)
{
Im[j]=liczba[i];
j++;
}
break;
case 2: // j - poczatek Im
if(stan==2) // czy nie drugie j z rzedu
{
blad=i; //podwojne j - miejsce bledu
stan=-1;
} else stan=2;
break;
case 10: stan=-1; blad=i; break; //cos innego - blad
default: stan=-1; blad=i; break;
}getch();
i++;
}
printf("Stan: %d", stan);
printf("\nBlad: %d", blad);
printf("\nRe: %s", Re);
printf("\nIm: %s", Im);
printf("\n%lf", atof(Re));
printf("\n");
getch();
return 0;
}
int coto(char *tab,int element)
{
int zwrot;
zwroc=10;
if (isdigit(tab[element]) || tab[element]=='.') zwrot=1;
if (tab[element]=='j') zwrot=2;
if (isspace(tab[element])) zwrot=-1;
if (tab[element]=='\0') zwrot=0;
return zwrot;
}
-
- Użytkownik
- Posty: 25
- Rejestracja: 18 paź 2007, o 19:36
- Płeć: Mężczyzna
- Lokalizacja: Ustka
- Podziękował: 1 raz
- Pomógł: 8 razy
ANSI C - konwersja tablicy znakow na liczby
W 23. linijce radze zmienic scanf("%s",liczba) na gets(liczba), bo scanf'em pobierasz wszystko az do bialego znaku(spacja, tabulator czy entera), wiec jak wpiszujesz dajmy na to '12.33 j456' to liczba = '12.33', zatem nie ma potrzeby sprawdzania w funkcji coto czy natrafiono na spacje, bo jej na pewno nie bedzie w 'liczba'. Czyli coto nigdy nie zwroci -1. A przy gets(liczba) jest zapisywana cala linijka.
No i w linii 69 zwroc na zwrot
A moglbys objasnic co program ma robic, co w nim nie dziala? ;] Narazie rozumiem, ze pobierane jest wejscie i w Re zbierane sa cyfry jakiejs liczby. Litera 'j' pelni funkcje czegos w rodzaju separatora miedzy Re a Im, a Im to costam - to troche za malo
No i w linii 69 zwroc na zwrot
A moglbys objasnic co program ma robic, co w nim nie dziala? ;] Narazie rozumiem, ze pobierane jest wejscie i w Re zbierane sa cyfry jakiejs liczby. Litera 'j' pelni funkcje czegos w rodzaju separatora miedzy Re a Im, a Im to costam - to troche za malo
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
ANSI C - konwersja tablicy znakow na liczby
Dzieki wielkie Ze tez nie pomyslalem o wyswietleniu liczby Rzeczywiscie scanf ucina sobie wszystko po spacji i dlatego nie moglem wygenerowac bledu gdy wpisalem spacje Teraz oczywiscie wszystko dziala jak nalezy. Co do tego programu - mam taki projekt do zrobienia. Jak sobie nie bede z czyms radzil - napisze tutaj znow. Narazie wszystko dziala dzieki tobie POZDRO i kolejny plus dla ciebie.
Btw. gets to standardowa biblioteka stdio.h??
Btw. gets to standardowa biblioteka stdio.h??
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
ANSI C - konwersja tablicy znakow na liczby
Kolejne pytanko: Czy mozna (jesli tak to jak) zadeklarowac funkcje, ktora by zwracala kilka tablica char [30], albo lepiej float??
Np mam:
Czy jest to wogole mozliwe?? POZDRO
Np mam:
Kod: Zaznacz cały
char tab1[30]="2343 asd";
char tab2[30]="909 wer";
float t1,t2;
t1=atof(tab1);
t2=atof(tab2);
return t1,t2;
-
- Użytkownik
- Posty: 25
- Rejestracja: 18 paź 2007, o 19:36
- Płeć: Mężczyzna
- Lokalizacja: Ustka
- Podziękował: 1 raz
- Pomógł: 8 razy
ANSI C - konwersja tablicy znakow na liczby
A gdzie tam, o takich rzeczach w C mozna pomarzyć Trzeba kombinować. Np deklarujesz globalna tablice na wyniki atof'ow i w srodku funckji zapisujesz je do tej tablicy, a po zakonczeniu ow funkcji mozna sie odwolywac do tych wynikow w calym programie.
Btw zamiast deklarowac dwie tablice tab1 i tab2 po 30 elementow mozna zrobic jedna dwuwymiarowa tablice - tab[2][30]. Ja bym to tak zrobil:
Nie wiem czy o to chodziło, jak coś to pytaj.
Btw zamiast deklarowac dwie tablice tab1 i tab2 po 30 elementow mozna zrobic jedna dwuwymiarowa tablice - tab[2][30]. Ja bym to tak zrobil:
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#define N 2
float wyniki[N];
//przechowywane wyniki konwersji
void f(char tab[N][30]){
float t[N] = {0, 0};
strcpy(tab[0], "2343 asd");
strcpy(tab[1], "909 wer");
t[0] = atof(tab[0]);
t[1] = atof(tab[1]);
wyniki[0] = t[0];
wyniki[1] = t[1];
}
int main(){
char tablice[N][30];//zamiast char tab1[30], tab2[30];
f(tablice);
printf("%f\n%f", wyniki[0], wyniki[1]);
return 0;
}
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
ANSI C - konwersja tablicy znakow na liczby
Hehe Tak to ja wiem, ze mozna, ale gosciu nie lubi u nas zmiennych globalnych :/ Masz plusa, bo widac, ze sie znasz na rzeczy Ja to zrobilem struktura, chociaz to tez jakby jest zmienna globalna POZDRO
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
ANSI C - konwersja tablicy znakow na liczby
Nie ma potrzeby deklarowania zmienne globalnej, to może być zmienna lokalna.
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#define N 2
void f(char tab[N][30], float *wyniki){
float t[N] = {0, 0};
strcpy(tab[0], "2343 asd");
strcpy(tab[1], "909 wer");
t[0] = atof(tab[0]);
t[1] = atof(tab[1]);
wyniki[0] = t[0];
wyniki[1] = t[1];
}
int main(){
float wyniki[N];
//przechowywane wyniki konwersji
char tablice[N][30];//zamiast char tab1[30], tab2[30];
f(tablice, wyniki);
printf("%f
%f", wyniki[0], wyniki[1]);
return 0;
}
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
ANSI C - konwersja tablicy znakow na liczby
To juz chyba ostatnie pytanie: Jak oczyscic bufor klawiatury?? Potrzebne mi to, gdyz zle dziala mi ten kod:
POZDRO
Kod: Zaznacz cały
#include <stdio.h>
int main()
{
int x,y=0,ile;
char liczba[30];
memset(liczba, 0, 30);
printf("Podaj ile liczb chcesz wczytac: ");
scanf("%d", &ile);
for(x=0;x<ile;x++)
{
printf("
Podaj liczbe: ");
gets(liczba);
printf("%s
",liczba);
y+=x;
}
printf("%d",y);
getch();
return 0;
}
-
- Użytkownik
- Posty: 107
- Rejestracja: 7 lis 2006, o 12:03
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 20 razy
ANSI C - konwersja tablicy znakow na liczby
polecam fgets zamist gets
co do "konfliktu" między scanfem a getsem, to w buforze prawdopodobnie może być jeszcze poprzednia linia, może pomoże:
scanf("%d
",&ile);
co do "konfliktu" między scanfem a getsem, to w buforze prawdopodobnie może być jeszcze poprzednia linia, może pomoże:
scanf("%d
",&ile);