scanf, используя пробел в качестве конца строки - PullRequest
0 голосов
/ 31 августа 2018

Для моего летнего проекта я построил маленький и немного дурацкий механизм шифрования, мне хотелось, чтобы у меня была функция, позволяющая пользователю вводить серии строк / символов и шифровать их прямо в терминале, но по какой-то причине программа (я думаю, что ее scanf) печатает только первое слово. Это может быть способ определения конца ввода пользователя, но я считаю, что проблема в scanf, а не в моем коде (хотя я читаю это, и это заставляет меня задавать вопросы). Вот код, который является подходящим:

printf("would you like to [e]ncrypt or [d]ecrypt, or type a word to encrypt\n");
char q[50];
for(int s = 0; s<50; s++){ //initialize string to '0'
    q[s] = '0';
}
scanf("%s \n", q); //reads input from user
for(int s = 0; s<50; s++){ //for loop to read every char and encrypt it
        if(q[s] == '0'){ //'0' determines the end of line
            break;
        }else{  
            union shifter sh = { 0 }; //uses a union to shift the char to unreadable (relatively) char
            sh.str = q[s];
            sh.i += 5;
            printf("%c", sh.str); //prints out chars one at a time
        }

    }
printf("\n"); //new line when done

inb4 вы, ребята, говорите, что пользователь не может ввести 0, я знаю это, как дополнительный вопрос, могу ли я инициализировать его как нечитаемый символ, выполнив, скажем,

char = 3;

и положить его как нечитаемый символ (точнее конец теста)

спасибо за помощь

1 Ответ

0 голосов
/ 31 августа 2018

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

см. http://www.cplusplus.com/reference/cstdio/scanf/

...