Scanf()不读取数字0或读取错误

时间:2013-04-15 22:10:22

标签: c scanf

你好,我有一个小问题。我试图创建一个银行等待时间程序,但是我用scanf()读取0值的时间不会读取或读取错误。我做了一些搜索,但注意到解决了我的问题。

这是代码..它用C语言。

#include <stdio.h>
int main(){
int c, n, t,i,d;//entradas do usuário (caixas, usuários, momento de chegada, tempo de atendimento
int menor_espera=0;// caixa de menor tempo de espera
int tempo_maximo = 20;// tempo maximo de espera por atencimento
int resultado=0;//Numero de pessoas com mais de 20 minutos de espera por atendimento

scanf(" %u %u %*c\n", &c, &n);// Lê o numero de caixas, numero de clientes no dia
if(c>0 && n>0){//iniciação só com valores positivos e possiveis c>1, n>1 (1 caixa e um cliente)
    int caixa[c];// declara o um vetor de caixas
    for(i=0;i<n;i++){// Loop de numero de usuários
    scanf(" %u %u %*c\n", &t, &d);//Lê um cliente (T e D)
    printf("print: %u %u\n", c, n);
        int j;
        for(j=0; j<c;j++){// loop de caixas
            if(caixa[j]<caixa[menor_espera]){//chaca se o caixa atual é o primeiro caixa disponivel (caixa com menos tempo de uso)
                menor_espera = j;//positivo, atualiza o caixa de menor espera
            }
        }if(caixa[menor_espera]-t>tempo_maximo){//checa se o cliente terá de esperar mais que o tempo maximo para ser atendido baseado na sua chegada
            resultado++;//positivo, atualiza o contador de usuário que esperaram mais que o tempo maximo
        }caixa[menor_espera] += d;// atualiza o tempo de uso do caixa que foi utilizado
    }
    printf("Resultado final: %d\n", resultado);// exibe resultado final
}getch();

}

这是一个输入

1 16
0 10
0 10
0 10
3 10
5 10
7 10
11 10
13 10
14 10
15 10
16 10
17 10
18 3
19 10
20 10
23 3

这是我的输出

print: 10 0
print: 0 0
print: 0 3
print: 0 5
print: 0 7
print: 0 11
print: 0 13
print: 0 14
print: 0 15
print: 0 16
print: 0 17
print: 0 18
print: 19 10
print: 0 10
print: 3 3
print: 3 3
Resultado final: 16

但它看起来不像这样。

请求任何帮助。如果我找到解决方案,我会在这里发布。

2 个答案:

答案 0 :(得分:2)

一个问题是您没有从scanf()捕获或测试返回值。它返回它解析的项目数,或者在i / o错误时返回-1。

考虑这样的事情,至少要弄清楚这是否有问题:

if (scanf(" %u %u %*c\n", &t, &d) < 2)  //Lê um cliente (T e D)
     printf ("input conversion or i/o error\n");

答案 1 :(得分:2)

这是有问题的:

scanf(" %u %u %*c\n", &c, &n);

它会查找两个数字,一些空格和一个被忽略的非空格字符,然后是更多的空格(可能是也可能不是换行符)。

根据您的输入文件,第一个scanf()读取:

1 16
0

要读取的下一个字符将是第二行数据上1的{​​{1}}。这就是你遇到问题的原因。

使用10一次读取一行,fgets()解析该行。如果您坚持使用它,请测试sscanf()fgets()(或sscanf())的结果。

这是您所需要的近似值。

scanf()

我认为原始代码中存在一些逻辑错误(一些用注释突出显示),但我不确定修正应该是什么。