返回的字符未显示

时间:2018-04-04 20:53:18

标签: c

我试图使用" char getlastc(char *)"返回传递数组的最后一个字符。功能,但它没有在主显示(它什么都没显示),虽然我尝试了很多时间来寻找bug但是找不到。请指出我的问题。

#include <stdio.h>

char getlastc(char* array) {
   char c;
   while(c = *array) {
      if(*array++ == '\0') {
          return  c;
      }
   }

}


int main() {
    char array[50] = "Hello World";
    char *array1 = "Hello World";
    printf("%c %c", getlastc(array), getlastc(array1));
    return 0;
}

3 个答案:

答案 0 :(得分:1)

if()中的getlastc()语句永远不会评估为true

您可能想要做的是使用preincrement运算符而不是postincrement:

if(*++array == '\0') return  c;

否则,您在每次迭代时测试相同的字符两次,除了(c = *array)求值为false且函数退出(没有返回值)的最后一次迭代。

修改

还有一个问题是,当空字符串传递给此函数时,while()循环根本不会执行。这是一个更简单的选择:

char getlastc(char* array) {
    if (!*array) return '\0';
    while (*array) array++;
    return *--array;
}

答案 1 :(得分:1)

*array++返回的字符与分配给c的字符相同。这是因为我们取消引用array++返回的指针,这是array 之前递增的值。

此外,如果输入空字符串,则函数不返回任何内容。

使用预增量和一点点改组,我们可以很好地解决这个问题:

   char c;
   while(c = *array) {
      if(*++array == '\0') {
        break;
      }
   }
   return c;

现在我们将返回输入字符串的最后一个字符,或者在我们传递空字符串的情况下返回'\0'

作为旁注,您可能希望在printf()中添加换行符。

答案 2 :(得分:0)

已经接受的答案,但该功能必须在所有情况下返回一个值。这也处理空字符串(返回可打印字符)。

#include <stdio.h>

char getlastc(char *array) {
    char c = *array;
    while(*++array) {
        c = *array;
    }
    if(!c) {
        c = '?';            // the empty string
    }
    return c;
}

int main()
{
    char array[50] = "Hello World";
    char *array1 = "Hello World";
    char *array2 = "42";
    char *array3 = "";     // the empty string
    printf("%c %c %c %c\n", getlastc(array), getlastc(array1), getlastc(array2), getlastc(array3));
    return 0;
}

节目输出:

d d 2 ?