2014-10-04 5 views
0

이 작은 코드에 문제가 있습니다. 문제는 데이터 입력과 관련이 있습니다. 입력 된대로 데이터를 가져올 수 없습니다. 다음 값을 입력하면 :scanf() 정크 값 받기, 이중 문제 없음

g1 = 3; Q = 3 기간 (TERMO) = 3

G1 = 3, Q = 0, 용어 (TERMO) = 2686724.

얻을

이미 전후 scanf,getchar()fflush(stadin) 사용하여 시도 데이터 입력 루틴을 지정하고 "% f (d)" 사이에 공백을 넣으십시오. 아무것도 작동하지 않습니다. DevC++과 CodeBlocks를 사용하고 있는데 모두 동일한 문제가 있습니다 (gnu gcc 일 수 있습니까?).

나는 무엇을 해야할지 잘 모릅니다. 코드가 scanf()이거나 문제가있는 PC입니까?

이것은 C 코드입니다. 문제는 termos_pg() 함수 루틴에 있습니다. 문장 printf("g1=%.f, q=%.f, termo=%d,\n",g1,q,termo);calcula_pg() 함수 루틴을 입력하면 termos_pg() 루틴에 들어갑니다. 아무도 나를 도울 수 있습니까?

#include <stdio.h> 
#include <stdlib.h> 
#include <locale.h> 
#include <math.h> 
float ind,gn,g1,val,q; 
int termo,gx=0,i; 
main() 
{ 
setlocale(LC_ALL,"Portuguese"); 

char X; 
printf ("\nSe houver parâmetro desconhecido, tecle s ou S, caso nao, ENTER.\n"); 
X=getch(); 
fflush(stdin); 

if(X=='s' || X=='S'){ 
    es_pg(); 
    return (0);} 
    else{ 
     termos_pg(); 
     return (0); 
    } 
system("PAUSE");  
return 0; 
} 

termos_pg() 
{ 
printf("\nDigite o 1º termo da PG: "); 
scanf("%f",&g1); 

printf("Digite a razao da PG: "); 
scanf("%f",&q); 

printf("Digite a quantidade de termos: "); 
scanf("%d",&termo); 
calcula_pg(g1,q,termo); 
} 

calcula_pg(g1,q,termo) 
{ 
printf("g1=%.f, q=%.f, termo=%d,\n",g1,q,termo); 
printf("\n\tA sequência é: \n"); 
for(i=0;i<termo;i++) 
    if(++gx==termo) 
     printf("\ta%d= %20.f.\n",gx,(g1*powf(q,(termo-(termo-i))))); 
    else 
     printf("\ta%d= %20.f;\n",gx,(g1*powf(q,(termo-(termo-i))))); 
     system("PAUSE"); 
} 

es_pg(){;} 
+0

주 후 : 여기

는 효과를 입증하는 예제 프로그램의 왼쪽 코드의' 시스템은 ("PAUSE") 원래의 외곽으로 치지 만'else' 절뿐 아니라'for()'루프 다음에 발생하는 것을 들여 쓰기 위해 들여 쓰기해야합니다. 그게 문제 야? – chux

답변

2

당신은 컴파일러가 당신이 int -typed 변수가 아닌 float을 전달하는 가정을 의미하는 calcula_pg에 인수에 대한 유형을 제공하지 않았습니다. 출력 여기

#include <stdio.h> 

void ints(int x, int y, int z) 
{ 
    printf("ints: x == %.f, y == %.f, z == %d\n", x, y, z); 
} 

void floats(float x, float y, int z) 
{ 
    printf("floats: x == %.f, y == %.f, z == %d\n", x, y, z); 
} 

int main() 
{ 
    ints(3.14, 3.14, 5); 
    floats(3.14, 3.14, 5); 
    return 0; 
} 

것 :

ints: x == 0, y == 0, z == 3 
floats: x == 3, y == 3, z == 5 
0

추가 FFLUSH (표준 출력)는 scanf 전에 모든 printf와 통화

+0

stdin과 stdout이 다르면 fscanf (stdin, .. 대신 scanf를 사용하여 fts를 사용하는 것이 도움이되지 않습니다. 대신 fgets를 사용하여 줄을 읽은 다음 sscanf를 사용하여 값을 얻는 것이 좋습니다. –