0

我想读取数据:示例文本 opp 我看到了:示例(输入)文本(输入) opp(输入)

但是,我的代码不能正常工作。

#include <stdio.h>
#include <stdlib.h>
int main(){
    char separator[] = " ";
    char *schowek;
    char *wejscie;

    gets(&wejscie);
    schowek = strtok(&wejscie,separator);

    while( schowek != NULL )
    {
        printf( "%s\n", schowek );
        schowek = strtok( NULL, separator );
    }

    return 0;
}

好的,我有这个代码。

#include <stdio.h>
#include <stdlib.h>

int main()
{

    char * slowo[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "hundred",
"thousand", "million"};
    int liczba[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90,100,1000,1000000};

    char n[]="";
    int i=0;

    char s1[]="zero";


    char separator[] = " ";

    char wejscie[1024];
    if (fgets(wejscie, 1024, stdin))
    {
        char* schowek = strtok(wejscie,separator); /* Removed '&'. */

        if(strcmp(wejscie,n)==0)
        {
            exit;
        }

        while (schowek)
        {
            printf("%s\n", schowek);
            schowek = strtok(NULL, separator);
        }
    }
    return 0;
}

他一切都好吗?现在我想将字符串转换为数字。

样本输入

六负七百二十九一百万一百一

样本输出

6 -729 1000101

我怎样才能做到这一点?

4

3 回答 3

3

wejscie是一个未初始化的指针,gets()正在写入不应该写入的内存,可能会导致分段错误。请注意,gets()它容易受到缓冲区溢出的影响,因为它没有提供限制读取字符数的工具(请参阅警告:gets 函数是危险的)。改用fgets()a char[]

char wejscie[1024];
if (fgets(wejscie, 1024, stdin))
{
    char* schowek = strtok(wejscie,separator); /* Removed '&'. */
    while (schowek)
    {
        printf("%s\n", schowek);
        schowek = strtok(NULL, separator);
    }
}

虽然与该程序无关,但请注意这strtok()不是线程安全的。

于 2013-03-21T12:14:22.230 回答
0

您没有分配缓冲区来保存读取的数据。

 char *wejscie;

分配一个指针来保存缓冲区的地址,而不是实际的缓冲区。

 gets(&wejscie);

读入那个指针,而不是一个足够大的缓冲区。

这是这样做的方法(在堆栈上分配缓冲区):

 char buffer[1024];
 fgets(buffer, sizeof(buffer), stdin);

如果您希望使用指针和动态内存,那么可以这样做:

 char * wejscie = malloc(1024);
 fgets(wejscie, 1024, stdin);
于 2013-03-21T12:13:28.527 回答
0

你没有内存来存储数据。快速示例:

char wejscie[256];
gets(wejscie);

现在wejscie指向有效的内存块。

于 2013-03-21T12:16:17.673 回答