C - Получение строки, проверяющей это и делающей это двойной - PullRequest
0 голосов
/ 17 ноября 2011
double_q_CPUTime;
double temp;

printf("Please enter q: CPU Time: ");

scanf("%lf", &temp);

if(input_validator('a',temp) == 'T') {
    q_CPUTime = temp;
}
else {
    printf("Invalid input");
}

Я не могу понять, как обрабатывать ошибки для приведенного выше кода. Я в основном хотел бы

  1. Запрос пользователя на ввод
  2. Подтвердите ввод пользователя, чтобы увидеть, содержит ли он только 1,2,3,4,5,6,7,8,9 или. в основном, чтобы убедиться, что это двойной
  3. Тогда, если это значение double, я бы хотел преобразовать значение сохранения в temp в q_CPUTIME
  4. А если это не двойное число, то покажите пользователю сообщение об ошибке "неверный ввод"

Я бы хотел, чтобы это повторялось до тех пор, пока пользователь не введет правильный дубль.

Я пробовал это много способов, и код в верхней части это моя лучшая попытка. Я просто не могу придумать способ реализовать это.

Каждый раз, когда я пытался, даже если пользователь вводит строку, он просто сохраняет какое-то странное число в двойном, что приводит к тому, что мои вычисления в дальнейшем нарушаются в программе или даже к С.

Извиняюсь за мой последний очень смутный пост на эту тему.

(я смотрел на проверку каждого введенного символа, но потом столкнулся с проблемами при переводе его в двойное число)

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

Просто проверьте возвращаемое значение scanf для обнаружения ошибок.

#include <stdio.h>

int main(int argc, char const* argv[])
{
        double input = 0.0;

        // scanf() returns the number of correctly read input items
        //In our case that's 1
        if (scanf("%lf", &input) == 1) {
                printf("%f", input);
        } else {
                printf("input error");
        }
        return 0;
}
1 голос
/ 18 ноября 2011

Вы должны использовать strtod;он проверяет двойное переполнение / переполнение, например:

#include <errno.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

  double d;
  char *e,s[100];

  fgets(s,100,stdin); if( s[strlen(s)-1]=='\n' ) s[strlen(s)-1]=0;
  errno=0;
  d=strtod(s,&e);
  if( *e || errno==EINVAL || errno==ERANGE )
    puts("error");
  else
    printf("d=%f\n",d);
0 голосов
/ 17 ноября 2011

Удалите все после вашего printf. Читайте в строке от пользователя. Используйте strtod, чтобы преобразовать его в double и проверить, является ли это допустимой двойной строкой.

...