/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
TurboC++ input problem
Fra : Martin


Dato : 09-07-04 15:10

Jeg har et problem med at få mit program til at genkende et input fra
brugeren. Der skal gives et tal til en variabel, som defineres med en
if-sætning alt efter hvad for en farve der skrives (med bogstaver).
Sort 0, brun 1 mm., det er en konverter af modstandes farver til ohm-værdi.
Jeg har lavet noget af det, men jeg tror der mangler en line med f.eks.
atoi(f1,m1) i ring 1 og atoi(f2,m2) til ring 2 og ligeså 3, men det fik jeg
ikke til at virke.
Det er kun sat til at skrive udkastet foreløbig, så jeg kan se det er
opfanget, den skriver ikke variablen men (null) eller intet.
Scriptet kan hentes her http://htmltips.dk/ohmslov.cpp søg efter case 'm'
eller linie 1300.

Mvh.
Martin



 
 
Lasse Westh-Nielsen (09-07-2004)
Kommentar
Fra : Lasse Westh-Nielsen


Dato : 09-07-04 19:04

"Martin" <mf_NO_Spima@digginet.dk> wrote:

> Jeg har et problem med at få mit program til at genkende et input fra
brugeren.

Ja. Dit problem er de her sammenligninger:

....
scanf("%s",&m1);
if (m1=="sort") f1=0;
....

Du indlæser en streng og laver en sammenligning - men den sammenligning du
laver med == sammenligner ikke værdierne af de to strenge, men i stedet
deres adresser. Og de er altid forskellige.

Brug istedet strcmp:

#include <string.h>
....
scanf("%s",&m1);
if (strcmp(m1, "sort") == 0) f1=0;
....

--
Lasse Westh-Nielsen
lasse@daimi.au.dk




Martin (09-07-2004)
Kommentar
Fra : Martin


Dato : 09-07-04 22:30



"Lasse Westh-Nielsen" <lasse@daimi.au.dk> skrev i en meddelelse
news:40eede4b$0$23874$14726298@news.sunsite.dk...
> "Martin" <mf_NO_Spima@digginet.dk> wrote:
>
> > Jeg har et problem med at få mit program til at genkende et input fra
> brugeren.
>
> Ja. Dit problem er de her sammenligninger...............
<snip>:
Lasse Westh-Nielsen
lasse@daimi.au.dk


Mange tak, det virker !

Lige to mere, hvis du vil:
Men hvad nu, når jeg har 2 variabler bestående af f1=2 og f2=5 og gerne vil
have tallet 25 i en og samme variabel?

Hvordan skriver man 2 i fjerde potens (2*2*2*2) når der kun haves to tal?
2^4 men kan man det i editoren, noget med at taste ascii værdien?

Mvh.
Martin



Lasse Westh-Nielsen (09-07-2004)
Kommentar
Fra : Lasse Westh-Nielsen


Dato : 09-07-04 22:44

"Martin" <mf_NO_Spima@digginet.dk> wrote:

> Men hvad nu, når jeg har 2 variabler bestående af f1=2 og f2=5 og gerne
vil
> have tallet 25 i en og samme variabel?

int a = 2;
int b = 5;
int c = 10*a + b; // c = 25

eller mener du concatenering af strenge? brug strcat!

#include <string.h>

char* s1 = "hello";
char* s2 = "world";
char* s3 = strcat(s1, s2); /* s3 = "helloworld" */

man skal dog nok vist sørge for der er plads i s1 til de ekstra
karakterer...

#include <string.h>

char s1[1000];
char* s2 = "world";
strcpy(s1, "hello");
strcat(s1, s2); // s1 = "helloworld"

sådan noget lignende, det står i Kernighan & Ritchie, side 249.

> Hvordan skriver man 2 i fjerde potens (2*2*2*2) når der kun haves to tal?
> 2^4 men kan man det i editoren, noget med at taste ascii værdien?

Det sidste forstod jeg ikke helt, hvad er du ude på?

Mvh Lasse


--
Lasse Westh-Nielsen
lasse@daimi.au.dk




Martin (10-07-2004)
Kommentar
Fra : Martin


Dato : 10-07-04 00:01



"Lasse Westh-Nielsen" <lasse@daimi.au.dk> skrev i en meddelelse
news:40ef11fc$0$23873$14726298@news.sunsite.dk...
> "Martin" <mf_NO_Spima@digginet.dk> wrote:
>
> > Men hvad nu, når jeg har 2 variabler bestående af f1=2 og f2=5 og gerne
> vil
> > have tallet 25 i en og samme variabel?
>
> int a = 2;
> int b = 5;
> int c = 10*a + b; // c = 25
>
> eller mener du concatenering af strenge? brug strcat!
>
> #include <string.h>
>
> char* s1 = "hello";
> char* s2 = "world";
> char* s3 = strcat(s1, s2); /* s3 = "helloworld" */
>
> man skal dog nok vist sørge for der er plads i s1 til de ekstra
> karakterer...
>
> #include <string.h>
>
> char s1[1000];
> char* s2 = "world";
> strcpy(s1, "hello");
> strcat(s1, s2); // s1 = "helloworld"
>
> sådan noget lignende, det står i Kernighan & Ritchie, side 249.

*********
(jeg har en bog af Finn Elvekjær)
Vores kode fra før:
scanf("%s",&m1);
if (strcmp(m1, "sort") == 0) f1=0;
osv. med farver.
og
scanf("%s",&m1);
if (strcmp(m2, "sort") == 0) f2=0;
osv. med farver


ok. jeg afvikler programmet og siger roed og groen og der returneres
værdien 2 til variablen f1, værdien 5 til f2.
Det første eksempel med a, b og c virker ikke umiddelbart, den kan ikke lide
scanf("%s",&m1);
if (strcmp(m1, "sort") == 0) int f1=0; /* jeg puttede INT ind her*/

int f5 = 10*f1 + f2; /* f5 = 25 */ jeg forstår ikke helt at den kan det på
denne kommando, men hvis du siger det så må det være rigtigt. */


Det andet eksempel med strcat er til karakterer og ikke tal?

mvh.
Martin



Martin (10-07-2004)
Kommentar
Fra : Martin


Dato : 10-07-04 14:12

Hej Lasse

Tak for hjælpen.
Jeg har fået det hele til at virke. Jeg må have været træt i aftes, men jeg
skulle lige sætte parantesen, så kunne jeg se det.
(10*f1)+f2=f6

Mvh.
Martin



Martin (10-07-2004)
Kommentar
Fra : Martin


Dato : 10-07-04 20:36

Der skal udføres noget hvis det indtastede er på kun ét ciffer,
men hvad skal oversætte det til et 1-tal i variablen "laengde"?
Der vises i øjeblikket (null).

scanf("%f",&m1);
laengde = strlen(m1);
if (laengde==1)
udfør noget her....


Mvh.
Martin



Bertel Brander (10-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 10-07-04 22:49

Martin wrote:
> Der skal udføres noget hvis det indtastede er på kun ét ciffer,
> men hvad skal oversætte det til et 1-tal i variablen "laengde"?
> Der vises i øjeblikket (null).
>
> scanf("%f",&m1);
> laengde = strlen(m1);
> if (laengde==1)
> udfør noget her....
>

Jeg forstår vist ikke spørgsmålet.

Hvad er det der viser (null) ?

Er m1 en char * eller et char array eller er det en float?

Hvis det er en char * eller et array kan du ikke
bruge scanf("%f",&m1); til at læse en float,
du skal bruge scanf("%s",m1); og konvertere
den til en float bagefter med strtod.
Hvis m1 er en float kan du ikke bruge strlen
til den.

/b

Martin (10-07-2004)
Kommentar
Fra : Martin


Dato : 10-07-04 23:50

ok her er hele case n
Det virker som om den ikke får fat i at værdien af laengde er 1, hvis der
tastes et ciffer ind, eller 2 hvis tastes 10-99
Med den her <laengde = strlen(m1);> skulle der gerne være en værdi i
"laengde".
Lige nu er den sat til en char.
Jeg prøver med scanf("%s",m1); og konvertere
den til en float bagefter med strtod.

float f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,result=0,o1,o2,o3,o4;
char
x=5,y=1,h=70,v=25,i=0,ch=0,dkk=0,usa=0,tegn,navn[21],iu[10],ir[10],m1[6],m2[
6],m3[6],m4[6],p1,p2,p3,p4,p5,p6,p7,ingen[6],sort,soelv,guld,brun,roed,orang
e,gul,groen,blaa,lilla,graa,hvid,laengde;

case 'n': /**** modstandsv'rdi til farvekode ****/
/* clrscr(); */ /* ryd sk'rmen */
{ gotoxy(e+11,s+4);
cprintf("m: Konvert,r modstandsv'rdi til farvekode.");
gotoxy(e+12,s+5);
cprintf(" 4. ring er tolerance. ");
gotoxy(e,s+9);
cprintf("Indtast ohmv'rdi uden praefiks: ");
scanf("%f",&m1);
laengde = strlen(m1);
cprintf("%f",laengde);
if (laengde==1)

f2=sort;
f3=guld;
if (strcmp(m1, "0") ==0) f1=sort;
if (strcmp(m1, "1") ==0) f1=brun;
if (strcmp(m1, "2") ==0) f1=roed;
if (strcmp(m1, "3") ==0) f1=orange;
if (strcmp(m1, "4") ==0) f1=gul;
if (strcmp(m1, "5") ==0) f1=groen;
if (strcmp(m1, "6") ==0) f1=blaa;
if (strcmp(m1, "7") ==0) f1=lilla;
if (strcmp(m1, "8") ==0) f1=graa;
if (strcmp(m1, "9") ==0) f1=hvid;

gotoxy(e,s+10);
cprintf("Indtast tolerance: ");
scanf("%f",&o2);
if (o2==0) f4=sort;
if (o2==1) f4=brun;
if (o2==2) f4=roed;
if (o2==0.5) f4=groen;
if (o2==0.25) f4=blaa;
if (o2==0.1) f4=lilla;
if (o2==0.05) f4=graa;
if (o2==10) f4=soelv;
if (o2==0.05) f4=guld;

gotoxy(e,s+14);
cprintf("Farvekoden er : %s %s %s %s ",f1,f2,f3,f4);
textcolor(RED);
gotoxy(e,s+19);
cprintf("Tryk en tast for hovedmenu.");
gotoxy(e,s+20);
cprintf("ESCAPE 1 gang for at afslutte, og");
gotoxy(e,s+21);
cprintf("ESCAPE 2 gange fra hovedmenuen.");
textcolor(WHITE);
flushall(); /* Maa ikke tages vaek */
break;

Mvh.
Martin
>



Bertel Brander (11-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 11-07-04 00:10

Martin wrote:
> scanf("%f",&m1);
> laengde = strlen(m1);
> cprintf("%f",laengde);
> if (laengde==1)
>
> f2=sort;
> f3=guld;
> if (strcmp(m1, "0") ==0) f1=sort;
> if (strcmp(m1, "1") ==0) f1=brun;
> if (strcmp(m1, "2") ==0) f1=roed;
> if (strcmp(m1, "3") ==0) f1=orange;
> if (strcmp(m1, "4") ==0) f1=gul;
> if (strcmp(m1, "5") ==0) f1=groen;
> if (strcmp(m1, "6") ==0) f1=blaa;
> if (strcmp(m1, "7") ==0) f1=lilla;
> if (strcmp(m1, "8") ==0) f1=graa;
> if (strcmp(m1, "9") ==0) f1=hvid;

Jeg tror du skal lave m1 om til at være et array af char's:
char m1[123];

Og læse den med:
scanf("%s", m1);

I cprintf("%f", laengde); skal du bruge %d, da jeg
går ud fra at laengde er en int (og ikke en float
eller double).

Jeg tror at du skal have et par {} efter if(laengde==1),
Jeg er dog ikke sikker på hvor den skal ende.

/b

Martin (11-07-2004)
Kommentar
Fra : Martin


Dato : 11-07-04 00:38

Det kan jeg godt se, det kan være jeg kommer til at vende tilbage til det,
men jeg fik lige lavet noget her som næsten virker.
Men når man taster et tal, er input og værdi altid ens, hvorfor det?
Jeg skal bruge antal pladser brugt til det indtastede tal , og tallet selv.
Derfor virker det næste ikke, tror jeg.

float f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,result=0,o1,o2,o3,o4;
char
x=5,y=1,h=70,v=25,i=0,ch=0,dkk=0,usa=0,tegn,navn[21],iu[10],ir[10],m1[6],m2[
6],m3[6],m4[6],p1,p2,p3,p4,p5,p6,p7,ingen[6],sort,soelv,guld,brun,roed,orang
e,gul,groen,blaa,lilla,graa,hvid,laengde;
char input[80], *endptr;
double value;

og så i main linie 1400 :

case 'n': /**** modstandsværdi til farvekode ****/
/* clrscr(); */ /* ryd sk'rmen */
{ gotoxy(e+11,s+4);
cprintf("m: Konverter modstandsværdi til farvekode.");
gotoxy(e+12,s+5);
cprintf(" 4. ring er tolerance. ");
gotoxy(e,s+9);
cprintf("Indtast ohmværdi uden praefiks: ");
gets(input);
value = strtod(input, &endptr);
gotoxy(e,s+11);
printf("Strengen er %s tallet er %.1f\n", input, value); /* input og value
er altid ens??
if (input=="1")
{
f2=sort;
f3=guld;
}
if (value==0) f1=sort;
if (value==1) f1=brun;
if (value==2) f1=roed;
if (value==3) f1=orange;
if (value==4) f1=gul;
if (value==5) f1=groen;
if (value==6) f1=blaa;
if (value==7) f1=lilla;
if (value==8) f1=graa;
if (value==9) f1=hvid;

gotoxy(e,s+10);
cprintf("Indtast tolerance: ");
scanf("%f",&o2);
if (o2==0) f4=sort;
if (o2==1) f4=brun;
if (o2==2) f4=roed;
if (o2==0.5) f4=groen;
if (o2==0.25) f4=blaa;
if (o2==0.1) f4=lilla;
if (o2==0.05) f4=graa;
if (o2==10) f4=soelv;
if (o2==0.05) f4=guld;

gotoxy(e,s+14);
cprintf("Farvekoden er : %s %s %s %s",f1,f2,f3,f4);
textcolor(RED);
gotoxy(e,s+19);
cprintf("Tryk en tast for hovedmenu.");
gotoxy(e,s+20);
cprintf("ESCAPE 1 gang for at afslutte, og");
gotoxy(e,s+21);
cprintf("ESCAPE 2 gange fra hovedmenuen.");
textcolor(WHITE);
flushall(); /* Maa ikke tages vaek */
break;

Mvh.
Martin



Bertel Brander (11-07-2004)
Kommentar
Fra : Bertel Brander


Dato : 11-07-04 00:53

Martin wrote:


> Men når man taster et tal, er input og værdi altid ens, hvorfor det?

Det skulle de også gerne være.

> Jeg skal bruge antal pladser brugt til det indtastede tal , og tallet selv.

Antal pladser findes ved at bruge strlen, tallet selv findes med strtod.

> gets(input);

gets() er farlig, brug fgets(intput, sizeof(input), stdin);

> value = strtod(input, &endptr);

Her sætter du netop value til at være det samme som input.
Input er en streng, og value er det samme som input i form af en
double, dvs værdien selv.

/b

Martin (11-07-2004)
Kommentar
Fra : Martin


Dato : 11-07-04 01:42

ok det gør den så nu, 2 forskellige tal og følger med hvis det er et større
tal, også i antal pladser.
Men jeg får en lvalue required hvis jeg rører ved de her
if (input=0) f1=sort;
Jeg skal vel konvertere igen lige efter den her testudprint med strengen og
tallet?
printf("Strengen er %s tallet er %.1f\n", input, value);



case 'n': /**** modstandsv'rdi til farvekode ****/
/* clrscr(); */ /* ryd sk'rmen */
{ gotoxy(e+11,s+4);
cprintf("m: Konvert,r modstandsv'rdi til farvekode.");
gotoxy(e+12,s+5);
cprintf(" 4. ring er tolerance. ");
gotoxy(e,s+9);
cprintf("Indtast ohmv'rdi uden praefiks: ");
gets(input);

value = strlen(input);
gotoxy(e,s+11);
printf("Strengen er %s tallet er %.1f\n", input, value);
if (value==1)
{
f2=sort;
f3=guld;
}
if (input=0) f1=sort;
if (input=1) f1=brun;
if (input==2) f1=roed;
if (input==3) f1=orange;
if (input==4) f1=gul;
if (input==5) f1=groen;
if (input==6) f1=blaa;
if (input==7) f1=lilla;
if (input==8) f1=graa;
if (input==9) f1=hvid;

"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:40f080ce$0$225$edfadb0f@dread14.news.tele.dk...
> Martin wrote:
>
>
> > Men når man taster et tal, er input og værdi altid ens, hvorfor det?
>
> Det skulle de også gerne være.
>
> > Jeg skal bruge antal pladser brugt til det indtastede tal , og tallet
selv.
>
> Antal pladser findes ved at bruge strlen, tallet selv findes med strtod.
>
> > gets(input);
>
> gets() er farlig, brug fgets(intput, sizeof(input), stdin);
>
> > value = strtod(input, &endptr);
>
> Her sætter du netop value til at være det samme som input.
> Input er en streng, og value er det samme som input i form af en
> double, dvs værdien selv.
>
> /b

Mvh.
Martin



Martin (11-07-2004)
Kommentar
Fra : Martin


Dato : 11-07-04 17:20

Variablerne går igennem, men der kan være brug for en konvertering?.


float
f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,result=0,o1,o2,o3,o4,sort,soelv,guld,brun
,roed,orange,gul,groen,blaa,lilla,graa,hvid;
char
x=5,y=1,h=70,v=25,i=0,ch=0,dkk=0,usa=0,tegn,navn[21],iu[10],ir[10],m1[6],m2[
6],m3[6],m4[6],m5[6],m6[6],m7[6],p1,p2,p3,p4,p5,p6,p7,q1[6],q2[6],q3[6],q4[6
],q5[6],q6[6],q7[6],ingen[6],laengde;
char input[80], *endptr, inpat;
double value;
const char n1=1,n2=2,n3=3,n4=4,n5=5;


case 'n': /**** modstandsv'rdi til farvekode ****/
/* clrscr(); */ /* ryd sk'rmen */
{ gotoxy(e+11,s+4);
cprintf("m: Konvert,r modstandsv'rdi til farvekode.");
gotoxy(e+12,s+5);
cprintf(" 4. ring er tolerance. ");
gotoxy(e,s+9);
cprintf("Indtast ohmv'rdi uden praefiks: ");
gets(input);
value = strlen(input);
gotoxy(e,s+11);
printf("Indtastet tal er %s som fylder %.0f pladser",input,value);
if (value==1)
{
p2=sort;
p3=guld;
}
if (strcmp(input, "0") == 0) p1=sort;
if (strcmp(input, "1") ) p1=brun;
if (strcmp(input, "2") == 0) p1=roed;
if (strcmp(input, "3") == 0) p1=orange;
if (strcmp(input, "4") == 0) p1=gul;
if (strcmp(input, "5") == 0) p1=groen;
if (strcmp(input, "6") == 0) p1=blaa;
if (strcmp(input, "7") == 0) p1=lilla;
if (strcmp(input, "8") == 0) p1=graa;
if (strcmp(input, "9") == 0) p1=hvid;


gotoxy(e,s+10);
cprintf("Indtast tolerance: ");
gets(input);
gotoxy(e,s+12);
value = strtod(input, &endptr);
printf("Indtastet tolerance er %6.2f", value);
if (value==0) f4=sort;
if (value==1) p4=brun;
if (value==2) p4=roed;
if (value==0.5) p4=groen;
if (value==0.25) p4=blaa;
if (value==0.1) p4=lilla;
if (value==0.05) p4=graa;
if (value==10) p4=soelv;
if (value==0.05) p4=guld;
else
p4=soelv;
gotoxy(e,s+14);
cprintf("Farvekoden er : %s %s %s %s",p1,p2,p3,p4);
textcolor(RED);
gotoxy(e,s+19);
cprintf("Tryk en tast for hovedmenu.");
gotoxy(e,s+20);
cprintf("ESCAPE 1 gang for at afslutte, og");
gotoxy(e,s+21);
cprintf("ESCAPE 2 gange fra hovedmenuen.");
textcolor(WHITE);
flushall(); /* Maa ikke tages vaek */
break;



Martin (12-07-2004)
Kommentar
Fra : Martin


Dato : 12-07-04 17:07



"Bertel Brander" <bertel@post4.tele.dk> skrev i en meddelelse
news:40f080ce$0$225$edfadb0f@dread14.news.tele.dk...
> Martin wrote:
>
>
> > Men når man taster et tal, er input og værdi altid ens, hvorfor det?
>
> Det skulle de også gerne være.
>
> > Jeg skal bruge antal pladser brugt til det indtastede tal , og tallet
selv.
>
> Antal pladser findes ved at bruge strlen, tallet selv findes med strtod.
>
> > gets(input);
>
> gets() er farlig, brug fgets(intput, sizeof(input), stdin);
>
> > value = strtod(input, &endptr);
>
> Her sætter du netop value til at være det samme som input.
> Input er en streng, og value er det samme som input i form af en
> double, dvs værdien selv.
>
> /b

Okay, det lykkes igen. Det er noget af det første i tråden der blev skrevet,
strcpy (variabel, "farve").

Mvh.
Martin



Per Abrahamsen (15-07-2004)
Kommentar
Fra : Per Abrahamsen


Dato : 15-07-04 15:38

"Lasse Westh-Nielsen" <lasse@daimi.au.dk> writes:

> eller mener du concatenering af strenge? brug strcat!
>
> #include <string.h>
>
> char* s1 = "hello";
> char* s2 = "world";
> char* s3 = strcat(s1, s2); /* s3 = "helloworld" */
>
> man skal dog nok vist sørge for der er plads i s1 til de ekstra
> karakterer...
>
> #include <string.h>
>
> char s1[1000];
> char* s2 = "world";
> strcpy(s1, "hello");
> strcat(s1, s2); // s1 = "helloworld"
>
> sådan noget lignende, det står i Kernighan & Ritchie, side 249.

Siden der står C++ i emnelinien:

#include <string>
using namespace std;

// ...

string s1 = "hello";
string s2 = "world";
string s3 = s1 + s2;

Så slipper du for al det allokeringshalløj.

Martin (15-07-2004)
Kommentar
Fra : Martin


Dato : 15-07-04 19:44



"Per Abrahamsen" <abraham@dina.kvl.dk> skrev i en meddelelse
news:rj8ydl2v5o.fsf@sheridan.dina.kvl.dk...
> "Lasse Westh-Nielsen" <lasse@daimi.au.dk> writes:
>
> > eller mener du concatenering af strenge? brug strcat!
> >
> > #include <string.h>
> >
> > char* s1 = "hello";
> > char* s2 = "world";
> > char* s3 = strcat(s1, s2); /* s3 = "helloworld" */
> >
> > man skal dog nok vist sørge for der er plads i s1 til de ekstra
> > karakterer...
> >
> > #include <string.h>
> >
> > char s1[1000];
> > char* s2 = "world";
> > strcpy(s1, "hello");
> > strcat(s1, s2); // s1 = "helloworld"
> >
> > sådan noget lignende, det står i Kernighan & Ritchie, side 249.
>
> Siden der står C++ i emnelinien:
>
> #include <string>
> using namespace std;
>
> // ...
>
> string s1 = "hello";
> string s2 = "world";
> string s3 = s1 + s2;
>
> Så slipper du for al det allokeringshalløj.

string s3 = s1 + s2; Istedet for at bruge strcat?
ok. men jeg får kun brug for det når det indholder cifre.
mvh.
Martin



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste