2013-12-23 2 views
-8

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

#include <iostream> 
#include <conio.h> 
#include <string> 
using namespace std; 

int main() 
{ 
    double hour; 
    char s1 [20]={'e','n','t','e','r',' ','a','n',' ','h','o','u','r'}; 
    char s2 [15]={'g','o','o','d',' ','m','o','r','n','i','n','g'}; 
    char s3 [15]={'g','o','o','d',' ','a','f','t','e','r',' ','n','o','o','n'}; 
    char s4 [15]={'g','o','o','d',' ','e','v','e','n','i','n','g'}; 
    char s5 [20]; 
    char s6 [15]; 
    strcpy (s5,s1); 
    cout<<s5; 
    cin>>hour; 
    if(hour >= 6 && hour >=11.40) 
    strcpy (s6,s4); 
    cout<<s6; 
    if (hour >= 11.41 && hour <= 12.59) 
    if(hour >=1 && hour <=4.30) 
    strcpy (s5,s3); 
    cout<<s5; 
    if(hour >= 4,31 && hour <= 5.59) 
    strcpy (s5, s4); 
    cout<<s5; 

    strlen (s6); 
    cout<<"every characters in the string is"<<s6; 


    getch(); 
    return 0; 
} 
+0

Пожалуйста, улучшить свой английский, это немного трудно понять, что вам нужна помощь. – karlphillip

+0

Этот вопрос не соответствует теме, потому что он непонятен и не показывает никаких исследований. –

+1

'час> = 4,31' выглядит неправильно .. он * не будет вести себя так, как ожидалось. Кроме того, используйте 'if (..) {..}' (обратите внимание на фигурные скобки), чтобы иметь несколько операторов в 'if'. – user2864740

ответ

2

Ваши строки не все заканчивается, так strlen, <<, и все остальное, ожидающей прекращено строки будут падать с конца массива дает неопределенное поведение.

Поскольку это C++, вы хотите использовать std::string для ваших строк:

std::string s1 = "enter an hour"; 

Если вы действительно хотите возиться со строками C-стиля для какой-то причине, то инициализируем их от прерванного строкового литерала (или массив символов, если вы действительно, действительно ненавидите читаемый код), позволяя компилятор вывести правильную длину:

char s1[] = "enter an hour"; 
// or 
char s1[] = {'e','n','t','e','r',' ','a','n',' ','h','o','u','r','\0'}; 

вы также есть опечатка здесь:

hour >= 4,31 // should be 4.31 

и здесь:

hour >=11.40 // should be <= 

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

0

Прежде всего вам необходимо включить #include <cstring> или #include <string.h>, или он не должен быть скомпилировать

0

Я думаю, в первую очередь, если заявление вы имеете в виду, если (час> = 6 & & час < = 11,40) также strlen возвращает длину строки, вам нужна переменная для получения этого возвращаемого значения. И я не понимаю, почему на земле вы используете массив символов в C++

0

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

Другое думает, что если вы хотите использовать точку 4.31 не с camma 4,31.

Просто введите фразу непосредственно

char s1 [20]="enter an hour"; 

Для если statments использовать их таким образом:

if (hour > 6 && hour <= 11.41){ 
    strcpy(s6, s2); 
    cout << s6; 
} 
else if (hour > 11.41 && hour <= 14){ 
//... 
} 
//... etc 
Смежные вопросы