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 17:33:43 浏览: 121
这段代码是用来判断一个字符是否在一个颜色数组中。程序首先定义了一个整型变量 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;
}
```
希望这可以帮助你解决问题!
一个单词表存放了五个表示颜色的英文单词,输入一个字母,在单词表中查找并输出所有以此字母开头的单词,若没有找到,输出Not Found。要求用指针数组实现。 /* 单词索引(用指针数组实现)*/ #include<stdio.h> int main(void) { int i, flag = 0; char ch; const char = {"red", "blue", "yellow", "green", "black" }; ch = getchar(); for(i = 0; i < 5; i++) { if( ){ flag = 1; puts( ); } } if(flag == 0) { printf("Not Found\n"); } return 0; }
好的,可以参考以下代码实现:
```c
/* 单词索引(用指针数组实现)*/
#include <stdio.h>
#include <string.h>
int main(void) {
int i, flag = 0;
char ch;
const char *colors[] = {"red", "blue", "yellow", "green", "black"};
printf("请输入一个字母:");
ch = getchar();
for (i = 0; i < 5; i++) {
if (colors[i][0] == ch) {
flag = 1;
puts(colors[i]);
}
}
if (flag == 0) {
printf("Not Found\n");
}
return 0;
}
```
首先定义一个指针数组`colors`,存放五个表示颜色的英文单词。然后在`main`函数中读取用户输入的字母`ch`,遍历`colors`数组,如果某个单词以`ch`开头,则输出该单词,并将`flag`标记为1。最后,如果`flag`仍然为0,则输出"Not Found"。注意,`colors`数组中的元素是字符串常量,需要使用指向`const char`类型的指针来声明。
阅读全文