#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; }
时间: 2024-02-14 20:08:41 浏览: 128
这个程序有一些问题,我来给你指出来。
首先,你定义了一个指向字符常量的指针数组`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;
}
```
希望这可以帮助你解决问题!
阅读全文