2016-12-08 6 views
2

Итак, я пытаюсь получить входные данные в D, и когда я проверяю, что вход правильный, я либо заканчиваю бесконечным циклом, либо входным буфером перетекание. Бесконечный цикл или переполняющий буфер в D при запросе ввода

import std.stdio; 
import std.string; 
void main(){ 

    char[] data; 

    writeln("Hey Player ",1,". Would you like to make a guess?\n Type 'y' to guess or 'n' to continue "); 
    write("> "); 
    readf(" %s", &data); 
    char guessY = data[0]; 

    while(guessY != 'y' && guessY != 'Y' && guessY != 'n' && guessY != 'N') 
    { 
    writeln(guessY, " ",data); 
    writeln(""); 
    writeln("Hey Player ",1," enter the correct input please.\n Type 'y' to guess or 'n' to continue "); 
    write("> "); 
    readf(" %s", &data); 
    guessY = data[0]; 
    //fflush(&guessY); 
    } 
    writeln(guessY, " ",data); 
} 

И в настоящее время, если я пытаюсь читать ввод как массив символов, я должен остановить ПОЛУЧАТЬ ввод с помощью Ctrl + D, а затем она бесконечно петли, если я пытаюсь и получать только один символ, если набирается более одного символа, при следующем запросе ввода он будет автоматически использоваться. Я выбрал эту небольшую часть кода из большей функции, потому что именно здесь я выделил проблему.

ответ

1

Изменить scanf(" %s", &data);scanf(" %s\n", &data);.

В качестве альтернативы, вы можете просто прочитать один символ с: scanf(" %c", &guessY);

+0

Вопрос с использованием '% c', что я столкнулся, это позже я прошу 3 символов ввода отдельно спина к спине, и если вы поставите '% c', а кто-то вводит' abc' следующие два входа будут автоматически использоваться b и c Но '\ n' работал, спасибо вам большое! –