2015-04-02 37 views
-3

该代码的目标是,如果用户插入大于X个字符的名称,我会请求一个新名称,直到插入带有或少于X个字符的名称。我有休耕代码:只有使用插入的值(如果它的大小合适)

char * getName(){ 
    int size = 4; 
    int i; 
    char inserted[10]; 
    char name[4]; 
    while (size > 3){ 
     printf("Insert name, maximum 3 characters: "); 
     fgets(inserted, 10, stdin); 
     for (i=0; i<4; i++){ 
      if (inserted[i] == '\n'){ 
       size = 3; 
      } 
     } 
    } 
    sscanf(inserted,"%s", name); 
    return name; 
} 

但似乎它不工作.....我试图调试,但无法找到错误。如果你能够伸出援助之手,那就太好了。

编辑:我编辑的代码,这是错的

编辑:问题不在于如果返回与否的价值,但是是功能停留在一个无限循环 - 没有按“T似乎找到如果单词有正确的长度

+0

将'/ n''改为''\ n''。 '/'不是转义字符。还要注意:退出该函数后,局部变量的地址无效。 – BLUEPIXY 2015-04-02 15:46:55

+0

当它是当前代码中的正确类型时,它似乎会逃脱循环。 – BLUEPIXY 2015-04-02 16:03:56

+0

是的,已经在工作了,谢谢 – 2015-04-02 16:11:35

回答

2

编辑:

你不能从一个函数返回一个局部变量的地址[name。您需要动态分配内存才能返回指针。您可以使用malloc()

char * name = NULL; 
name = malloc(4); 

然后,从main()你必须free()内存一旦你用它做。


老答案:

首先,你必须改变char name[3];char name[4];以腾出空间用于终止空。

在你的代码,改变

for (i=0; i<4; i++){ 
    if (name[i] == "/n") 

for (i=0; i<4; i++){ 
    if (inserted[i] == '\n') 
+0

@BLUEPIXY对,但更严重的问题在那里。首先解决这个问题。 :-) – 2015-04-02 15:26:21

+0

请再次看到代码,我犯了一个错误写它(名称而不是插入,如你所说....) – 2015-04-02 15:31:25

+0

@luisdias的权利。你有没有注意到我提出的其他改变? – 2015-04-02 15:32:42

0

你比较字符串字面量的字符。您应该将"\n"更改为'\n',以便比较字符。你还要返回一个指向局部变量的指针。您应该使用malloc返回堆中分配的内存。

+0

没有使用malloc,就像你刚才提到的那样改变了“”到“',但是代码仍然不起作用。是否有任何方法来查看输入是否少于X个字符?感谢 – 2015-04-02 15:33:56

+1

如果你摆脱了语法错误 - 你现在在printf之后缺少一个分号,并且使用正斜杠'/ n'而不是反斜杠'\ n'它应该可以工作(循环退出位 - 本地内存问题仍然在那里)。 – sapensadler 2015-04-02 15:51:14

+0

感谢您的回复,现在我只是担心退出循环。已经尝试使用'/ n'和'\ n',结果是相同的(无限循环)。感谢 – 2015-04-02 15:57:02

相关问题