scanf()获取垃圾值,没有双重问题

时间:2014-10-04 13:48:24

标签: c scanf

我在使用这段小代码时遇到了麻烦。问题与数据输入有关。输入数据时我无法获取数据。如果我输入以下值:

  
    

g1 = 3; q = 3且term(termo)= 3
      我得到了     g1 = 3,q = 0,term(termo)= 2686724。

  

在数据输入例程之前和之后,getchar()scanf,之后已经尝试使用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(){;}

2 个答案:

答案 0 :(得分:2)

您没有为calcula_pg的参数提供任何类型,这意味着编译器假定您传递了int个类型的变量,而不是float

这是一个演示效果的示例程序:

#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

答案 1 :(得分:0)

在scanf

之前的每次printf调用之后添加fflush(stdout)