我的转换程序遇到了问题

时间:2015-03-03 23:11:33

标签: c++

对于我的课程,我将用C ++编写一个程序,将句子中的每个字符转换为相反的情况(从上到下,从下到上)。我们应该使用数组和用户定义的方法,这就是我想出的:

#include <iostream>
using namespace std;

// declare variables
int count = 0;      // array counter
int i = 0;          // loop control
char ch[100];     // each character entered will be stored in this array
char newCh[100];  // this will hold each character after its case has        been changed


main()
{
    cout << "Enter a sentence." << endl;   // prompts user

    while ( ch[count] != '\n' )            // loop continues until "enter" is pressed
    {
        cin >> ch[count];                  // store each character in an array
        count += 1;                        // increment counter
    }
    int convert();                         // call user-defined function
}

// even though it isn't necessary, we are using a user-defined function to perform the conversion
int convert()
{
    for ( i = 0; i >= 0; i++ )
    {
        if ( (ch[i] > 64) and (ch[i] < 91)
        )
        {
            newCh[i] = tolower(ch[i]);
        }
        else
        {
            newCh[i] = toupper(ch[i]);
        }
        cout << newCh[i];
    }
}

我不知道为什么,但它不起作用。我不相信我的while循环正在终止并执行程序的其余部分。任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:0)

while ( ch[count] != '\n' )中的循环条件是错误的,因为编译器会将ch中的所有条目初始化为零,并且当您在循环内增加count时,条件将永远false并且你有一个无限循环,导致你超出数组的限制。

超出数组限制的写入会导致undefined behavior,并导致整个程序非法。

我建议您了解std::stringstd::getline

答案 1 :(得分:0)

你的for循环有问题 - 你想要(i = 0; i&lt; count; i ++)。你的函数也可以是void,你需要将count值传递给它(你只需要使用convert()调用它而不需要int或void。

答案 2 :(得分:0)

我通过一些修改重写了你的代码。以下代码在我的机器中完美运行 -

#include <iostream>
#include<cstdio>
#include<string>
using namespace std;

void convert(char *, int);

string line;
char input[1024];
char output[1024];

main()
{
    cout << "Enter a sentence." << endl;


    while (getline(cin, line)) { // POINT 1
        cout<< line<<endl;

        //converting to char array since you need char array
        //POINT 2
        for(int i=0; i< line.length(); i++){
            input[i]=line[i];
        }

        convert(input, line.length());
        cout<<output<<endl;
        input[1024] = {0};  //POINT 3
        output[1024] = {0};
    }

}

//Custom Convert Method
void convert(char input[], int size){

    for(int i = 0; i < size; i++){ 

        if(input[i] >= 'a' && input[i] <= 'z'){
            output[i] = toupper(input[i]);
        } else {
            output[i] = tolower(input[i]);
        }

    }
}

在这里注意一些要点(在我的评论中) -
要点1:使用getline()方法读取整行。此处linestring

POINT 2:,因为你需要char数组我将字符串line转换为char数组输入[1024]

要点3: inputoutput数组正在重置以使用下一个值;

输出代码:

enter image description here

“Ctrl + C”将终止该程序

希望它会对你有所帮助。
非常感谢。