Ir para o conteúdo
meditas

Limitar os valores possíveis de uma variável

Mensagens Recomendadas

meditas    0
meditas

Boa noite.

Estou a desenvolver uma aplicação C que interage com uma BD, para um mini-projeto da escola, que engloba C e um site web com motor php.

A aplicaçao faz o update do valor do campo "validade". Neste campo so podem constar 2 numeros, 0 ou 1. como posso limitar o envio para bd enquanto o valor nao seja o 0 ou 1? ja tentei com uns if, mas nao resultou muito bem.

Obrigado.

cumps

/* Programa que interage com a BD leilão - UPDATE atributo validade*/
#include <mysql.h>
#include <stdio.h>
main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "root";
char *password = "*********";
char *database = "leilao";

int ponteiro;
char id_objecto[10];
char validade[10];

conn = mysql_init(NULL);
/* Ligação à BD */
if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
/*Pedido do ID do carro*/
printf("Introduza o ID do carro:\n");
gets(id_objecto);

printf("Quer que o carro seja leiloado? S=1 / N=0:\n");
gets(validade);

/* Query que faz o update do campo validade na BD leilão */
char query[200];
strcpy(query,"UPDATE objectos SET validade='");
strcat(query,validade);
strcat(query,"' WHERE id_objecto='");
strcat(query,id_objecto);
strcat(query,"'");

/* Envio da query para a base de dados */
if (mysql_query(conn, query)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}

   printf("Actualizou o campo validade na base de dados! %s\n",query);

mysql_close(conn);
}

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

printf("Quer que o carro seja leiloado? S=1 / N=0:\n");
gets(validade);

nem vou mencionar a quantidade de problemas que podem acontecer aqui ...

(o mesmo para id_objecto)

solução sem o fgets (nunca o gets)

char cleaner, validade; // validade é um valor numérico !!!
int ok = 0;

do {
 printf("Quer que o carro seja leiloado? S=1 / N=0 : ");
 fflush(stdout);
 if ((ok = scanf("%d", &validade) != 1 || validade < 0 || validade > 1) {
   pritnf("valor invalido\n");
 }
 while ((cleaner = getchar()) != '\n' && cleaner != EOF) /* void */;
while (!ok);

solução com fgets

#define SIZE 256

char buffer[size];
char cleaner, validade; // validade é um valor numérico !!!
int ok = 0;

do {
 printf("Quer que o carro seja leiloado? S=1 / N=0 : ");
 fflush(stdout);
 if (fgets(buffer, SIZE, stdin) == NULL) {
   printf("Erro de leitura dos dados\n");
 } else if ((ok = sscanf(buffer, "%d", &validade)) != 1 || validade < 0 || validade > 1) {
   pritnf("valor invalido\n");
 }

 if (buffer[strlen(buffer) - 1] != '\n')
 {
   while ((cleaner = getchar()) != '\n' && cleaner != EOF) /* void */;
 }
while (!ok);

------------

char query[200];
sprintf(query, "update objectos SET validade='%d' where id_objecto='%d'", validade, id_object);

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.