2014-11-04 6 views
-2
#include <stdio.h> 
int main() 
{ 
    double a=0; 
    char b=0; 
    scanf ("%d%c",&a,&b); 
    printf ("%d,%c", a, b); 
    return 0; 
} 

Это мой код для быстрой тестовой программы, которую я написал, чтобы играть с функцией scanf в C. Я пытаюсь, чтобы пользователь вводил что-то вроде 78X + 5 = 19 (затем ударил введите), а затем проанализируйте это на переменные a, b и c, где в этом случае a = 78, b = 5, c = 19. В примере кода, когда я печатаю в 78X, c не сохраняет значение b и только печатает «78», а затем завершает работу. Почему он не сохраняет значение b?Scanf непрерывный вход в C

+0

Это не способ сделать это. «78X + 5 = 19» - это строка по отношению к C, поэтому вам нужно обработать все выражение в виде синтаксического анализа через него и получить требуемые значения для a, b и c. – Gopi

+0

. Вы не собираетесь далеко продвигаться с ' scanf', так как он не очень гибкий, чем основной вход. Изучите использование библиотеки регулярных выражений или напишите более подробный парсер. –

ответ

0

, в вашем формате строка значительна. Строка %d,%c будет соответствовать вводу 78,x, но это не соответствует 78x.

Также необходимо использовать %f для сканирования и печати double. Использование %d вызывает неопределенное поведение (которое может проявляться как b, похоже, не появляется). Либо измените на %f, либо измените double на int.

+0

Пробовал и перекомпилировал, не исправил. – TopDog

+0

@TopDog Пробовал что? –

+0

изменил scanf на scanf («% d% c», & a, &b); – TopDog

0

Если вход 75x, то ниже код, который считывает значение и сохраняет его в a(75) и b(x) соответственно

#include <stdio.h> 
    int main() 
    { 
     int a=0; 
     char b=0; 
     scanf ("%d%c",&a,&b); 
     printf ("%d%c", a, b); 
     return 0; 
    } 
+0

Спасибо за это! Быстрый вопрос о повторении: если я инициализирую int a = 0 и использую% d как спецификатор формата, он работает нормально, но если я инициализирую double a = 0 и использую% f в качестве спецификатора формата, он выдает 0.0000, X. Почему это? – TopDog

+0

Используйте% lf во время сканирования – Gopi

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