Turbo C ++程序陷入困境

时间:2016-07-11 14:08:34

标签: c++ debugging turbo-c++

程序本身正常工作,做了它应该做的事情(将句子中的单词分开并打印出来)并且不会崩溃。但是,我无法退出该计划。它只是卡住了。我甚至尝试在最后给出一个退出(0),但它没有工作。

你能告诉我出了什么问题吗?

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<process.h>

typedef char* string;

void main()
{
clrscr();

string s;

cout << "\nEnter something : ";
gets(s);

int i;

for (i = 0; i < strlen(s); ++i)
{
if ( s[i] != 32 )// && ( !isalnum(s[i-1]) || i == 0 ) )
{
    char *word = s;
    int end = 0;

    for (; s[i] != 32 && i < strlen(s); ++i);

    if (i == strlen(s)) end = 1;
    else * (word + i) = '\0';

    cout << "\n" << word;

    if (end) break;

    strcpy(s, s+i+1);
    i = -1;
}
}

}

2 个答案:

答案 0 :(得分:3)

你告诉它这样做。删除system("pause");

并且,请停止使用20世纪80年代的C库和标题/工具。我们在这段时间内从MS DOS开始了。如果你想要有市场的技能,可以学习实际的ISO C ++(它是1998年发明的,并且自那时起近二十年来已经更新了三次)。

答案 1 :(得分:3)

未定义的行为

你宣布一个指针并且不要初始化它(你不要指向任何东西):

string s;
// a.k.a. char * s;

接下来,您输入:

gets(string);

这称为未定义的行为:写入未知地址。一个不错的操作系统和平台会出现段错误。

在计算机编程中,您需要使用数组分配内存:

char s[256];

或动态分配:

string s = new char[256];

在输入值之前,或者从输入或其他地方输入值。