2010-08-09 3 views
0
#include <stdio.h> 

int main() 
{ 
    char TurHare; 

    while(1) 
    { 
     scanf("%c",TurHare); 
    printf("\nCharacter :%c", TurHare); 
} 
    return 0; 
} 

Когда я компилирую, а затем запустить программу на выходе походит:ошибка зсапЕ в с при чтении символа

w 
Character : w 
Character : 

где ш является входом из консоли.

Это должно выглядеть как:

w 
Character : w 

Как это сделать?

ответ

2

Вы пропустили &.

повторных попытки с

int main() 
{ 
char TurHare; 

    while(1) 
    { 
    scanf("%c",&TurHare); 
    printf("\nCharacter :%c", TurHare); 
    } 

return 0; 
} 

Я рекомендую Геч, getche, GetChar использовать в случае характера, зсап приведет вас к каким-буферным проблемам

+0

все еще не работает. я имею в виду, что это должно быть только и только, но я вставил код здесь неправильно. Простите за это. – higherDefender

+0

try getch(), getchar(), getche() scanf показывает некоторые проблемы со строкой и символами. char c = getchar(); –

+0

Да, когда вы нажимаете, введите его в очередь, введите ключ в stdin, и в следующий раз, когда он выберет из stdin, таким образом, он не работает так, как должен –

1

Ok так это из-за возврат ключа, который вы вводите после ввод w. поэтому, когда он читает w и в другое время, он считывает символ конца строки.

0

Ваша программа выполняет то, что вы говорите, чтобы выполнять, выводит символы, которые вы вводите.

Теперь, когда вы вводите w, посмотрите, что вы делаете. Вы нажимаете 2 клавиши. ключ w и Enter. Это результат, который вы получаете, w и новую строку (из ключа ввода). Если вы этого не хотите, сделайте, например.

char TurHare; 

while(1) 
{ 
    if(scanf("%c",&TurHare) != 1) { //always check for errors 
     break; //or some other error handling 
    } 

    if(c != '\n') { //or perhaps if(!isspace(c)) from <ctype.h> 
     printf("\nCharacter :%c", TurHare); 
     fflush(stdout); 
    } 
} 
1

Существует проблема буферизации с scanf ("% c"). Многие люди используют fflush (stdin) для решения, но не ANSI.

void fflushstdin() 
{ 
    int c; 
    while((c=getchar())=='\n'); 
    if(c!=EOF) 
     ungetc(c,stdin); 
} 

main() 
{ 
    int TurHare; 
    while(fflushstdin(), !feof(stdin)&&1==scanf("%c",&TurHare)) 
    { 
     printf("\nCharacter :%c", TurHare); 
    } 
    return 0; 
} 

Разрыв петли с помощью^Z на Windows и^D с помощью Unix/Linux.

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