int i,flag=0; char ch; const char *color[5]={"red","blue","yellow","green","black"}; const char* *pc; pc=color; ch=getchar(); for(i=0;i<5;i++) if(**(pc+i)==ch) flag=1; if(flag) printf("Yes\n"); else printf("No\n"); return 0;
时间: 2024-04-03 22:33:43 浏览: 18
这段代码是用来判断一个字符是否在一个颜色数组中。程序首先定义了一个整型变量 i 和一个标志变量 flag,并定义一个字符变量 ch。然后定义了一个常量字符指针数组 color,其中存储了五个字符串。接着定义了一个指向常量字符指针的指针 pc,将其初始化为指向 color 数组的首元素。接下来从标准输入中读入一个字符,然后用 for 循环遍历 color 数组,判断是否有与输入字符相等的字符。如果有,则将 flag 置为 1。最后根据 flag 的值输出结果。
需要注意的是,这里用了两个指针指向同一个地址的技巧,即 pc 和 *(pc+i) 都指向 color 数组中的字符串。另外,代码中的 **(pc+i) 相当于 *(pc+i)[0],即指向 color 数组中第 i 个字符串的首字符。
相关问题
#include<stdio.h> int main(void) { int i, flag = 0; char ch; const char *color[5] = {"red", "blue", "yellow", "green", "black" }; const char ; pc = color; ch = getchar(); for(i = 0; i < 5; i++) { if( (pc + i) == ch){ flag = 1; puts( (pc + i) ); } } if(flag == 0) { printf("Not Found\n"); } return 0; }
这个程序有一些问题,我来给你指出来。
首先,你定义了一个指向字符常量的指针数组`color`,但是你没有给出指针数组的大小。你可以这样定义:
```
const char *color[5] = {"red", "blue", "yellow", "green", "black" };
```
接下来,你定义了一个空指针`pc`,但是你没有给它指向任何地址。你可以这样定义:
```
const char **pc = color;
```
然后,你使用`getchar()`来获取输入的字母,但是你没有忽略输入缓冲区中的回车符。你可以在读取字母之前加上一个空格,这样就可以清除缓冲区中的回车符了。代码如下:
```
ch = getchar();
getchar(); // 清除缓冲区中的回车符
```
接下来,你使用了`(pc + i)`来比较指针和字符,这是错误的。你应该使用`*(*(pc + i))`或者`pc[i][0]`来获取指针指向的字符串的第一个字符。代码如下:
```
if (*(*(pc + i)) == ch){
flag = 1;
puts(pc[i]);
}
```
最后,你使用了`puts()`函数来打印字符串,但是你应该使用`printf()`函数来打印字符串。代码如下:
```
if (*(*(pc + i)) == ch){
flag = 1;
printf("%s\n", pc[i]);
}
```
综上所述,这是你的修正后的程序:
```
#include <stdio.h>
int main(void) {
int i, flag = 0;
char ch;
const char *color[5] = {"red", "blue", "yellow", "green", "black" };
const char **pc = color;
ch = getchar();
getchar(); // 清除缓冲区中的回车符
for(i = 0; i < 5; i++) {
if (*(*(pc + i)) == ch){
flag = 1;
printf("%s\n", pc[i]);
}
}
if(flag == 0) {
printf("Not Found\n");
}
return 0;
}
```
希望这可以帮助你解决问题!
class EncodingDefs { public: static const int RAW = 0; static const int COPYRECT = 1; static const int RRE = 2; static const int HEXTILE = 5; static const int TIGHT = 7; static const int ZRLE = 16; static const char *const SIG_RAW; static const char *const SIG_COPYRECT; static const char *const SIG_RRE; static const char *const SIG_HEXTILE; static const char *const SIG_TIGHT; static const char *const SIG_ZRLE; };
这是一个 C++ 类 EncodingDefs,它定义了一些常量和字符串常量,用于表示远程桌面协议中的编码类型。
其中,常量 RAW、COPYRECT、RRE、HEXTILE、TIGHT 和 ZRLE 分别表示编码类型的编号。这些常量的值是固定的,不能修改。
另外,类中还定义了一些字符串常量,包括 SIG_RAW、SIG_COPYRECT、SIG_RRE、SIG_HEXTILE、SIG_TIGHT 和 SIG_ZRLE。这些字符串常量是编码类型的名称,可以用于在日志或其他输出中表示编码类型的名称。这些字符串常量的值也是固定的,不能修改。
这个类的作用是提供一种便捷的方式来表示和访问远程桌面协议中的编码类型,使得代码更加易读和维护。