C简单提问 求解为什么输出是 faavrhee 5C

#include
int main(void)
{
char str1 [] = "gawsie";
char *ps;

for (ps = str1; *ps != '\0'; ps++)
{
    if (*ps =='a' || *ps == 'e')
    putchar(*ps);
    else
    (*ps)--;
    putchar(*ps);              //为什么输出是 faavrhee 
}
getchar();
return 0;
c

5个回答

  #include<iostream>
#include<stdio.h>
#include <fstream>
using namespace std;

int main(void)
{
    char str1 [] = "gawsie";
    char *ps;
    for (ps = str1; *ps != '\0'; ps++)
    {
        if (*ps =='a' || *ps == 'e')
            putchar(*ps);
        else
        {
            (*ps)--;
            putchar(*ps);              //为什么输出是 faavrhee 
        }
    }
    getchar();
    return 0;
}

else 记得加括号

baidu_29947437
听哦绿 正解,丢了个括号
大约 3 年之前 回复

#include
int main(void)
{
char str1 [] = "gawsie";
char *ps;

for (ps = str1; *ps != '\0'; ps++)                                                                                                           
{
     if (*ps =='a' || *ps == 'e')
            putchar(*ps); 
     else
            (*ps)--;
     putchar(*ps); 
 }   
 getchar();
 return 0;

}

可以跟着你的代码走一次就知道了,缩进一下你的代码也可以发现你为什么会输入两次a和e
第一次进入循环时,*ps=’g’,此时会进入else执行*ps = *ps-1,那么此时*ps=’f’,(ps:参考26个英文字母表顺序) ,else走完后执行getchar(),输出f
第二次进入循环时,*ps=’a’,进入if,执行getchar()输出a,向下执行又遇到putchar(),再次输出a
第三次进入循环时,*ps=’w’,与第一次相同,输出一次v
第四次进入循环时,*ps=’s’,与第一次相同,输出一次r
第五次进入循环时,*ps=’i’,与第一次相同,输出一次h
第六次进入循环时,*ps=’e’,与第二次相同,输出两次e

不等于a g-- 就是f 等于a输出两次a w-- 是v s--是r i--是h 等于e输出两次e 这不就是你的程序写的意思吗!

qq_39507260
峰雪轩 为什么是输出两次a 和e
大约 3 年之前 回复
qq_39507260
峰雪轩 为什么是输出两次a 和e
大约 3 年之前 回复

(*ps)-- (*ps)是当前字母.每个字母都有其对应的ASCII码 g对应的ASCII是119 减一就是118 代表字符f 这关系到编译器内部如何处理转换的问题 O(∩_∩)O

你的代码应该是这样的. 上面的哥们括号给你加错了.


#include<iostream>
#include<stdio.h>
#include <fstream>
using namespace std;

int main(void)
{
    char str1 [] = "gawsie";
    char *ps;

    for (ps = str1; *ps != '\0'; ps++) {

        if (*ps == 'a' || *ps == 'e') {
            putchar(*ps);
        }
        else {
            (*ps)--;
        }
        putchar(*ps);              //为什么输出是 faavrhee
    }

    getchar();

    return 0;
}

@xianxujiang 说的是对的

你代码习惯很不好,而且你可以试着打断点,然后单步调试,就不需要问这个问题了.....

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问