2016-06-08 2 views
-1

этой программы с этим значением: ABCDEF нормально на ФристыеВо время печати цикла и зсап

, но еще раз, когда вы вводите значение с пространством, как: ABC DEF программа работает неправильно !!!! while loop игнорирует scanf во второй раз Что я делаю неправильно ?!

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 
int main(){ 
    bool checkSrc = false; 
    bool checkDst = false; 

    while (!checkSrc && !checkDst) 

    { 

    char ins[10]; 

    printf("White Player : "); 
    scanf("%s",&ins); 

    } 

} 
+5

Формат 'scanf'' '% s" 'читает * пробел * слова". –

+0

@ user3121023 Да, хотя также необходимо проверить символ '' \ n'' на 'ins [strlen (ins) -1]'. Если его там нет, буфер был слишком мал, и на строке ввода остались непрочитанные символы. Если он есть, буфер был достаточно большим, и вы можете делать дальнейшие манипуляции с строкой, например, удаление заглавных символов пробелов и завершающих пробелов, включая окончательный символ новой строки. –

ответ

2

% s - строка символов. Это будет читать последующие символы, пока не будет найдено пробел (пробельные символы считаются пустыми, новой линией и вкладкой).

Я рекомендую вам с помощью fgets() вместо scanf(), так как последний не имеет защиты от переполнения буфера.

#define namesize 15 
char *ins = malloc (namesize); 

fgets(ins, namesize, stdin); 
+0

... и обратите внимание, что новая строка char '\ n', если таковая будет, будет в буфере 'ins'. – LPs

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