#c
Вопрос:
Я даже не просил печатать двойные кавычки. Но он продолжает печататься после того, как я ввел ввод, начинающийся с D. Когда я ставлю «C», вывод нормальный. Пример:
вход > D
2
9
egdqncekq
B4 я поставил «egdqncekq», программа почему-то печатает двойные кавычки.
#include <stdio.h>
int main() {
char cd, m;
int size, i, disp, m1;
cd=getchar();
scanf("%d", amp;disp);
scanf("%d", amp;size);
switch(cd)
{
case 'C':
for(i=0; i<=size; i )
{
m=getchar();
m1=m disp;
if(m1>122)
{
m1=m1-26;
}
printf("%c", m1);
}
break;
case 'D':
for(i=0; i<=size; i )
{
m=getchar();
m1=m-disp;
if(m1<97)
{
m1=m1 26;
}
printf("%c", m1);
}
break;
}
printf("n");
return 0;
}
Комментарии:
1. Как вы «видите» двойные кавычки? Это не отображается в ваших выходных данных. По крайней мере, неясно, как вы приходите к выводу, что он их печатает.
2.@kaylum ссылка ссылка всегда после того, как я спрашиваю значение размера.
Ответ №1:
После второй scanf
во входном буфере остается символ новой строки (ASCII 10). Эта новая строка подхватывается getchar
функцией в каждом из циклов.
В случае «C» к этому значению добавляется 2, что приводит к 12. Это символ ввода формы ASCII, который печатается в виде дополнительной новой строки.
В случае «D» из этого значения вычитается 2, в результате чего получается 8. Это значение меньше 97, поэтому добавляется 26, в результате чего получается 34, что является кодом ASCII для "
символа, который затем печатается.
Перед вводом switch
инструкции вы должны выполнить вызов getchar
в цикле, пока не увидите новую строку. Это приведет к удалению входного буфера.
Комментарии:
1. В качестве альтернативы вы можете позвонить
fgets
, чтобы прочитать все строки ввода и использоватьsscanf
для чтения из буфера строк.