你好,我有一个小问题。我试图创建一个银行等待时间程序,但是我用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
但它看起来不像这样。
请求任何帮助。如果我找到解决方案,我会在这里发布。
答案 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()
我认为原始代码中存在一些逻辑错误(一些用注释突出显示),但我不确定修正应该是什么。