Olá!
Talvez não tenha sido explícita na minha dúvida, mas acabei por fazer um programinha que me resolveu o problema. O que este programa faz é avaliar se os 2 termos de uma soma são numericamente válidos ou não. Ainda avalia se o resultado faz sentido e pergunta se queremos continuar (respostas válidas; 's' || 'S' para continuar; 'n' || 'N' para sair).
Espero que isto ajude a quem precisar. Acho que dá sempre jeito ter estas rotinas à mão. A mim deu.
Fiquem bem***
Ana Luísa
/****************************************************************
*
* Objectivo: Verificar se os termos de uma soma e o resultado são valores numericamente válidos.
* Autora: Ana Luísa Pinho
* Data: 27/05/2008
*
****************************************************************/
#include <stdio.h> /* puts, gets, printf, scanf */
#include <stdlib.h> /* atof */
#include <math.h> /* isinf, isnan */
main()
{
/*Declaração das variáveis*/
char ch, str1[20], str2[20];
double result;
int i, j;
do
{
fflush(stdin); /*Limpa o teclado*/
/*1ª entrada*/
do
{
puts ("Introduzir primeiro nº: ");
scanf(" %s",&str1);
for(i=0;str1[i]!='\0';i++) /*Verifica se todos os caracteres são números.*/
{
if(isdigit(str1[i]))
continue;
else
{
printf("Erro! Não é um nº válido.\n");
break;
}
}
}
while(str1[i]!='\0');
/*2ª entrada*/
do
{
puts ("Introduzir segundo nº: ");
scanf(" %s",&str2);
for(j=0;str2[j]!='\0';j++) /*Verifica se todos os caracteres são números.*/
{
if(isdigit(str2[j]))
continue;
else
{
printf("Erro! Não é um nº válido.\n");
break;
}
}
}
while(str2[j]!='\0');
/*Conta*/
result=atof(str1)+atof(str2);
/*Verifica se o resultado é menos_infinito, mais_infinito ou NaN.*/
if(isinf(result) || isnan(result))
printf("Erro! O resultado não é válido.\n");
else
printf("Resultado: %.1lf\n", result);
/*Queremos fazer mais contas?*/
do
{
printf("Continuar? ");
scanf(" %c", &ch);
switch(ch)
{
case 's':
case 'S': break;
case 'n':
case 'N': break;
default: puts("Opção Inválida!");
}
}
while(ch!='s' && ch!='S' && ch!='n' && ch!='N');
}
while(ch!='n' && ch!='N');
puts("Fim do programa.\nAna Luísa Pinho, Maio/2008");
}