2015-03-12 2 views
1

Итак, у меня есть что-то, отличное от int, и из моего понимания максимальное значение для int равно 32676, и любое значение выше этого будет усечено в C.Как проверить сравнение, если ввод будет усечен?

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

Например, если пользователь пытается поставить 450000, мне нужно сказать им, чтобы они повторно вводили данные, однако простое сравнение, похоже, усекает значение перед сравнением с INT_MAX?

+1

читать в два раза :) затем сделать Comparision –

+0

Хотя это будет работать для Int случае, у меня есть ситуации, когда я читала в unsigned long, и я не могу сделать то же самое, что могу? – jsmith102894

+1

Я думаю, мой ответ поможет –

ответ

2

Лучше подход заключается в следующем

Сканирование число в виде строки, а затем преобразовать INT_MAX в строку. Используйте для этого itoa().

Сделайте сравнение строк, а затем соответствующим образом распечатайте сообщение. У вас не будет проблемы с хранением в любом int или float или что-то еще.

EDIT: Добавлен рабочий код

#include<stdio.h> 
#include <string.h> 
int main(){ 
char lhs[200]; 
printf("enter the number"); 
scanf("%s",lhs); 
char rhs[200]; 
sprintf(rhs, "%d", 2147483647); 
int rc = strcmp(lhs, rhs); 
if(rc == 0) 
    printf("[%s] equals [%s]\n", lhs, rhs); 
else if(rc < 0) 
    printf("[%s] more than [%s]\n", lhs, rhs); 
else if(rc > 0) 
    printf("[%s] less than [%s]\n", lhs, rhs); 
return 0 ; 
} 
+1

Nice. Но было бы лучше, если бы вы использовали 'INT_MAX' в качестве третьего аргумента' sprintf'. Кроме того, используйте '% 199s' вместо'% s' в 'scanf', чтобы предотвратить переполнение буфера. –

+0

Во-первых, я считаю, что вы заменили условия здесь, rc> 0 означает, что lhs больше, чем rhs. И второе, и самое главное, сравнение строк существенно отличается от сравнения чисел, например. «9»> «2147483647», потому что первый символ «9» больше, чем «2». –

1

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

Полный список ограничений по типу можно найти here.

Смежные вопросы