Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我应该在while循环中使用什么条件?_C - Fatal编程技术网

C 我应该在while循环中使用什么条件?

C 我应该在while循环中使用什么条件?,c,C,我的目标是将string1以相反的顺序复制到string2,但是我在第二个while循环中的条件显然不正确,如何实现while循环以继续,直到string1中的所有字母都进入string2?因为string1中的“\0”在while循环之前递减指针1之后已经通过了 //reversing strings.. #include <stdio.h> #include <stdlib.h> int main() { char *pointer1; char

我的目标是将string1以相反的顺序复制到string2,但是我在第二个while循环中的条件显然不正确,如何实现while循环以继续,直到string1中的所有字母都进入string2?因为string1中的“\0”在while循环之前递减指针1之后已经通过了

//reversing strings.. 

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

int main()
{
    char *pointer1;
    char *pointer2;
    char string1[20];
    char string2[20];
    pointer1 = string1; //allowing pointer to point to first letter of string1
    pointer2 = string2; //allowing pointer2 to point to first alphabet of string2
    printf("enter a string\n");
    gets(string1);
    while (*pointer1)
    {pointer1++;}
    pointer1--;
    while(*pointer2)
    {
        *pointer2 = *pointer1;
        pointer1--;
        pointer2++; 
    }
    *pointer2 = '\0';
    printf("%s", string2);

    return 0;
}
//反转字符串。。
#包括
#包括
int main()
{
字符*指针1;
字符*指针2;
charstring1[20];
charstring2[20];
pointer1=string1;//允许指针指向string1的第一个字母
pointer2=string2;//允许pointer2指向string2的第一个字母表
printf(“输入字符串”);
获取(string1);
while(*pointer1)
{pointer1++;}
指针1--;
while(*pointer2)
{
*指针2=*指针1;
指针1--;
指针2++;
}
*指针2='\0';
printf(“%s”,string2);
返回0;
}

第二个循环中的条件错误。请记住,由于您没有初始化
string2
,它将包含看似随机的数据。读取该数据(就像在第二个循环的条件中一样)会导致未定义的行为

您必须记住数组会衰减为指针,因此您可以使用数组作为指针,并具有如下条件

while (pointer1 >= string1) {...}
试试这个

size_t size = strlen(string1) 
while(size--)
{
    *pointer2 = *pointer1;
    pointer1--;
    pointer2++; 
}

如果人类缩进他们的代码,世界就会不同。我不明白,为什么你要在一个返回
int
while(*pointer2)
->
while(pointer1>=string1)
@BLUEPIXY的方法中尝试反转字符串,但是通过使用带指针的关系运算符,你在比较指针的大小还是什么?@user3151918
pointer1
指向数组
string1
的最后一个元素。通过比较
pointer1>=string1
,可以检查
pointer1
是否指向第一个元素或第一个元素之前的元素(顺序相反)。如果它指向第一个元素,则终止循环。我知道它是错的,如果你清楚地阅读了我的问题,你就会意识到这是我首先发布问题的唯一原因--你在while语句中到底比较了什么?@haccks想解释一下为什么它是错的吗因为我很确定它给出了正确的结果。这可能被认为是坏习惯,这在我看来是有争议的,但我不认为这是错的。@luk32;我想我在这件事上错了。这会奏效的。向上投票以反对错误投票。@user3151918它正在比较两个指针(如我所说,数组衰减为指针)和循环,只要指针
pointer1
大于或等于指针
string1
。好的,所以大小将继续递减,只要它不等于0,循环将继续,它/我很高兴它帮助了您。别忘了读:蓝猫;为什么会这样?