Miért nem olvassa be a számot sscanf-el a következő esetben?
Kezdő programozó vagyok.
Stack *s;
int i, n, a;
char *muvelet;
FILE* f = fopen("bemenet.txt", "rt");
allomany_ellenorzes(f);
s = create(n);
fscanf(f, "%i", &n);
muvelet = (char*)malloc(n*sizeof(int));
dinamikus_ellenorzes(muvelet);
fscanf(f, "%s", muvelet);
for(i=0; i<strlen(muvelet); ++i)
{
sscanf(muvelet,"%i",&a);
printf("%i\n", a);
}
A műveletet beolvassa állományból, ez lenne az: (((1+2)*3)-(5/(1.0+4)))
Mégsem sikerül sscanf-el beolvassa a számokat, kiír egy csomó 2686868-at, 1-es vagy 2-es helyett. Mi a hiba?
Jó lenne tudni, hogy:
allomany_ellenorzes(f); ez és dinamikus_ellenorzes(muvelet); ez mi a fenét csinál.
Azon kívül kellene a file PONTOS tartalma és az, hogy milyen kimenetet kapsz.
Ja,(int i, n, a; ) deklarálj még egy p változót is elé XD
Kezdo programozo.
lehet ennel van jobb levezetes de en igy csinaltam meg,a kollegad vagyok.
Amugy lehetne else aggal is es akkor minden mast venne a szamokon kivul.
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
#include <string.h>
int main()
{
Stack *s;
char t[]="(((1+2)/(2*1))-(1+1.523))";
char d[]="+-*/(";
int n=strlen(t),i;
s=create(n);
double a,b, muv;
for (i=0; i<n; ++i){
if(t[i]==')'){
b=pop(s);
muv=pop(s);
a=pop(s);
while(top(s)==(double)'('){
pop(s);
}
switch((int)muv){
case (int)'+' : push(s,a+b); break;
case (int)'-':push(s,a-b); break;
case (int)'/':push(s,a/b); break;
case (int)'*':push(s,a*b); break;
}
}
if(t[i]>='0' && t[i]<='9'){ // t[i] egy szam
sscanf(t+i, "%lf", &a);
push(s,a);
while((t[i+1]>='0' && t[i+1]<='9') || (t[i+1]=='.')){ //ha szamot talal vagy pontot lep egyett az i-vel !!!
++i;
}
}
if(strchr(d,t[i])!=NULL){ // t[i] = */+-(
push(s,t[i]);
}
}
printf("eredmeny: %.4f\n",top(s));
destroy(s);
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!