C 未显示返回的字符

C 未显示返回的字符,c,C,我试图使用“char getlastc(char*)”函数返回传递数组的最后一个字符,但它并没有显示在main中(它什么也不显示),尽管我尝试了很多次查找错误,但都没有找到。请给我指出问题所在 #include <stdio.h> char getlastc(char* array) { char c; while(c = *array) { if(*array++ == '\0') { return c; } }

我试图使用“char getlastc(char*)”函数返回传递数组的最后一个字符,但它并没有显示在main中(它什么也不显示),尽管我尝试了很多次查找错误,但都没有找到。请给我指出问题所在

#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;
}
#包括
char getlastc(char*数组){
字符c;
while(c=*数组){
如果(*array++='\0'){
返回c;
}
}
}
int main(){
字符数组[50]=“你好世界”;
char*array1=“你好,世界”;
printf(“%c%c”、getlastc(数组)、getlastc(数组1));
返回0;
}
getlastc()
中的
if()
语句从未计算为
true

您可能想做的是使用预增量运算符而不是后增量运算符:

if(*++array == '\0') return  c;
否则,您将在每次迭代中测试同一字符两次,但上一次迭代除外,其中
(c=*array)
的计算结果为
false
,函数退出(无返回值)

编辑:

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

char getlastc(char* array) {
    if (!*array) return '\0';
    while (*array) array++;
    return *--array;
}
getlastc()
中的
if()
语句永远不会计算为
true

您可能想做的是使用预增量运算符而不是后增量运算符:

if(*++array == '\0') return  c;
否则,您将在每次迭代中测试同一字符两次,但上一次迭代除外,其中
(c=*array)
的计算结果为
false
,函数退出(无返回值)

编辑:

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

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

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

#包括
char getlastc(char*数组){
字符c=*数组;
而(*++数组){
c=*数组;
}
如果(!c){
c=“?”;//空字符串
}
返回c;
}
int main()
{
字符数组[50]=“你好世界”;
char*array1=“你好,世界”;
char*array2=“42”;
char*array3=”“;//空字符串
printf(“%c%c%c%c\n”、getlastc(数组)、getlastc(数组1)、getlastc(数组2)、getlastc(数组3));
返回0;
}
程序输出:

d d 2 ? d 2?
已接受答案,但函数必须在所有情况下返回一个值。这也会处理空字符串(返回可打印字符)

#包括
char getlastc(char*数组){
字符c=*数组;
而(*++数组){
c=*数组;
}
如果(!c){
c=“?”;//空字符串
}
返回c;
}
int main()
{
字符数组[50]=“你好世界”;
char*array1=“你好,世界”;
char*array2=“42”;
char*array3=”“;//空字符串
printf(“%c%c%c%c\n”、getlastc(数组)、getlastc(数组1)、getlastc(数组2)、getlastc(数组3));
返回0;
}
程序输出:

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

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

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

   char c;
   while(c = *array) {
      if(*++array == '\0') {
        break;
      }
   }
   return c;
现在,我们将返回输入字符串的最后一个字符,或者在传递空字符串的情况下返回
'\0'


作为旁注,您可能希望在
printf()

中添加换行符
*array++
返回的字符将与分配给
c
的字符相同。这是因为我们正在取消对
array++
返回的指针的引用,它是递增之前
array
的值

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

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

   char c;
   while(c = *array) {
      if(*++array == '\0') {
        break;
      }
   }
   return c;
现在,我们将返回输入字符串的最后一个字符,或者在传递空字符串的情况下返回
'\0'


作为旁注,您可能希望在
printf()

这个
中添加一个换行符,而(c=*array)如果(*array++='\0')返回cwhile
条件必须为true,因此当
c=='\0'
时,code>不会达到
if
的值。无论如何,并不是所有的控件路径都返回一个值。为什么不使用大括号?第二,一次只做一件事我试过在while(1)中,然后用*数组赋值c,之后是if,但效果不太好。Ed Heal,我用过大括号,但结果相同,所以为了简单起见,没有大括号。@AhmadRaza由于缺少大括号,引入了一些非常漂亮的错误。如果(*array++='\0')返回c,(c=*array),Peter van der Linden将对此
感到失望while
条件必须为true,因此当
c=='\0'
时,code>不会达到
if
的值。无论如何,并不是所有的控件路径都返回一个值。为什么不使用大括号?第二,一次只做一件事我试过在while(1)中,然后用*数组赋值c,之后是if,但效果不太好。Ed Heal,我用过大括号,但结果相同,所以为了简单起见,没有大括号。@AhmadRaza由于缺少大括号,引入了一些非常漂亮的错误。Peter van der Linden可能会很失望,但是错过了空字符串的角案例。是的,但一开始我尝试了你所说的,我在一个无限循环中使用了预增量来检查,但这不起作用,所以我尝试了这个,但仍然不起作用。@squemish ossifrage,你在问(1)