2015-03-23 2 views
0

Я пишу код, в котором я просматриваю значения символов и сохраняю их в массиве. Я печатаю 'x', чтобы остановить сканирование символов. Теперь я положил '\0' в конец массива, чтобы преобразовать массив в строку. Теперь я пытаюсь преобразовать эту строку в float, используя std::stof. Вот мой кодНевозможно преобразовать строку в float

#include "stdafx.h" 
#include<stdio.h> 
#include <stdlib.h> 
#include <iostream> 
#include <string>  

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char str[100];; 
    char rec; 
    char count=0; 
    double n; 
    std::string::size_type sz; 

    while(1) 
    { 
     scanf("%c",&rec); 
     if(rec=='x') 
     { 
      str[count]='\0'; 
      printf("%s\n",str); 
      sz = strlen(str); 
      float value = std::stof (str,&sz); 
      printf("%f",value); 
     } 
     else 
     { 
      str[count]=rec; 
      count++; 
     } 

    } 
    return 0; 
} 

Но этот код преобразует только первый символ в значение поплавка. Например, я даю вход:

1 
2 
3 
. 
4 
x 

Мой результат: -

1.000000 

Так, пожалуйста скажите мне, где проблема

+0

Использование 'std :: cout' вместо' printf() 'и' std :: cin' вместо 'scanf()' может значительно упростить ваш код. –

+0

Но printf() и scanf() намного быстрее, чем std :: cout и std :: cin. –

+2

@tourniquet_grab Считаете ли вы, что скорость является проблемой для такого рода программ? – Jagannath

ответ

1

Эта проблема возникает потому, что входной буфер не очищается. Когда вы нажимаете enter, символ новой строки \n добавляется во входной буфер. Это можно исправить добавлением while(getchar()!='\n'); после звонка scanf.

В комментариях, πάντα ῥεῖ отметил, что с помощью std::cout вместо printf() и std::cin вместо scanf() может упростить код. Это также решило бы эту проблему.

0

Если вы действительно входите в номер с новой строки после каждого цифра, вы должны фильтровать эти новые строки из своей строки. Поэтому использовать что-то вроде:

if (rec != '\n') { 
    str[count]=rec; 
    count++; 
} 

Вместо просто:

{ 
    str[count]=rec; 
    count++; 
} 
Смежные вопросы