Извините, потому что я не могу придумать лучшего названия. У меня проблема с вводом. Вот мой тестовый код, который получает ввод в массив строк, а затем снова распечатывает его на экране, довольно просто
Первый тестовый код работает нормально, как и ожидалось
#include <stdio.h>
int main()
{
int i, index;
char d, c[20];
scanf("%d", index);
for(i=0; i<index; i++){
*(c+i) = getchar();
if (*(c+i)=='$')
break;
}
printf("the string is %s", c);
return 0;
}
во втором тестовом коде я использовал указатель, но вместо него c [i], и программа не запустилась. Это довольно странно, поскольку * (c + i) и c [i] эквивалентны
я изменил
*(c+i) = getchar(); // (0)
if (*(c+i)=='$')
to
c[i] = getchar(); // (1)
if (c[i]=='$')
or
c[i] = getchar(); // (2)
if (*(c+i)=='$')
or
*(c+1) = getchar(); // (3)
if (c[i]=='$')
(3) работают нормально, проблем не возникло, но в (1) и (2) вывод - это только первый символ ввода, независимо от того, как долго вводится строка
Пример: введите asdads $
вывод: a
Итак, проблема заключается в коде getchar (), есть разница между использованием указателя и прямого элемента массива для получения ввода, но я не знаю, в чем проблема.
Я назову эту проблему A, потому что я столкнулся с несколькими проблемами, когда пробовал код другого типа с помощью scanf и getchar.
Теперь я меняю getchar () в каждом случае на scanf
(0) (1) (2) (3): возникла проблема A. Теперь ни один из них не работает нормально со scanf. С getchar работают как минимум (0) и (3).
Теперь вместо ввода данных непосредственно в c, я ввожу данные в d и передаю это значение d в c [i]
Используя d = getchar (), проблема A возникает во всех 4 случаях. scanf дает тот же результат
Что странно, когда я нажимаю Enter, программа автоматически прерывается и выводится на экран
Это всего лишь тест, но вот текущая проблема, с которой я сталкиваюсь.
int z;
printf("continue? [1=yes/0=no] ");
scanf("%d", &z);
switch (z){
case 1: printf("next info is: ");
scanf("%d", &x);
break;
case 0: *end = '\0';
break;
}
Это работает нормально, использование scanf с% d в порядке, он ждет, пока я нажму 1 или 0, чтобы продолжить процесс. Однако проблема возникла с этими двумя кодами, которые, как ожидается, будут работать одинаково. Они не ждут, чтобы я ударил y / n, а идут прямо до конца
char z;
printf("continue? [y/n] ");
z=getchar(); // using getchar
if(z=='y'){
printf("next info is: ");
scanf("%d", &x);
}
else{
*end = '\0';
}
а также
char z;
printf("continue? [y/n] ");
z=getchar();
switch(z=='y'){
case 1: printf("next info is: ");
scanf("%d", &x);
break;
case 0: *end = '\0';
break;
}
Поэтому я не знаю, что не так с используемым мной кодом и почему использование указателя для получения данных отличается от использования массива напрямую.
scanf("%d", index);
неверно. - person Sourav Ghosh   schedule 20.03.2015scanf("%d", ...);
не использует'\n'
, введенный после целого числа. Он все еще находится вstdin
ожидании следующей операции ввода. - person chux - Reinstate Monica   schedule 20.03.2015