Большое число, введенное в качестве ввода, автоматически изменяется. Как мне это остановить? - PullRequest
1 голос
/ 03 марта 2020

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

Обычно пользователь должен вводить 24-битный двоичный текст. Например: «010000010100000101000001», и алгоритм должен выполнить операцию XOR с ключом «01000001», разделить биты результата на 3 8-битные части и найти десятичное значение двоичного кода 8-битных частей. Затем переведите их каждый в символы ASCII.

Я подумал об этом, чтобы определить целое число со значением для 1000000000000000000000000 (24 нуля), чтобы нули ввода не исчезали на передней панели. Однако, поскольку число большое, ввод «010000010100000101000001» становится «947938113»

Я попросил программу напечатать ввод, чтобы увидеть: (вход «010000010100000101000001 ')

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

int main(){

int count,tot,cho,key=1010000010100000101000001,temp,encry_tex;
char;

printf("Which base will you use to enter text (base 16/2)?");
scanf("%d",&cho);

temp=1000000000000000000000000;

if (cho==2)
{
   printf("Please enter the text to encrypt: ");
   scanf("%d",&encry_tex);

    tot=temp+encry_tex;  /* this part is not important, that's how the 
                            program was supposed to go but they don't mean 
                          anything to the question im asking. */
    tot=tot+key;

   printf("%u",encry_tex);
}
}

Если я ввожу ввод, такой как 10001001, он все еще дает мне 10001001, проблема появляется, когда цифры становятся большими.

Как я могу это исправить?

1 Ответ

0 голосов
/ 03 марта 2020

следующий предложенный код:

  1. избегает «буквального свертывания»
  2. выполняет желаемую функциональность
  3. удаляет ненужные #include операторы
  4. чистая компиляция
  5. выполняет желаемую функциональность
  6. правильно проверяет ошибки ввода / вывода
  7. следует аксиоме: только один оператор на строку и (самое большее) одна переменная декларация за утверждение.

А теперь предложенный код:

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


int main( void )
{
    //int count;
    int tot;
    int cho;
    //int key=1010000010100000101000001;
    int key = 0x01414141;
    //int temp;
    int encry_tex;


    printf("Which base will you use to enter text (base 16/2)?");
    if( scanf("%d",&cho) != 1)
    {
        fprintf( stderr, "scanf for input number base failed\n" );
        exit( EXIT_FAILURE );
    }

    //temp= 0b1000000000000000000000000;
    int temp = 0;
    temp |= (int)0x80000000;

    if (cho==2)
    {
        printf("Please enter the text to encrypt: ");
        if( scanf("%d",&encry_tex) != 1 )
        {
            fprintf( stderr, "scanf for input of number to encrypt failed\n" );
            exit( EXIT_FAILURE );
        }

        tot=temp+encry_tex;  /* this part is not important, that's how the 
                                program was supposed to go but they don't mean 
                              anything to the question im asking. */
        tot=tot+key;

       printf("%u",encry_tex);
    }   
}
...