题目:
下表是国家和它们的首都:
Australia Canberra
Belgium Brussels
China Beijing
Denmark Copenhagen
England London
France Paris
Greece Athens
Ireland Dublin
Scotland Edinburgh
Wales Cardiff
写一个程序输入一个国家的国家名,输出该国的首都名。
**提示信息:"请输入国家名:"
**输出格式要求:"%s的首都为%s!" "你输入的国家%s没有找到它的首都!"
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *m[]= {"Australia","Belgium","China","Denmark","England","France","Greece","Ireland","Scotland","Wales"};
char *n[]= {"Canberra","Brussels","Beijing","Copenhagen","London","Paris","Athens","Dublin","Edinburgh","Cardiff"};
char x[20];
int i ;
printf("请输入国家名");
scanf("%s",&x[20]);
for(i = 0; *m[i] == '\n';i++)
{
if(*m[i] == x)
{
printf("%s的首都为%s!",m[i],n[i]);
}
if(*m[i] == '\n')
{
printf("你输入的国家%s没有找到它的首都!");
}
}
}
之前几种写法都不合适,sizeof(m)算出来是40,是10个指针的大小,而直接写成10,那么指针的意义何在,直接写成数组就行了。
我修改了一下代码,如下,题主可以看看运行一下,自己增减一下国家和首都数量来看看是否合理:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *m[] = { "Australia", "Belgium", "China", "Denmark", "England", "France", "Greece", "Ireland", "Scotland", "Wales" };
char *n[] = { "Canberra", "Brussels", "Beijing", "Copenhagen", "London", "Paris", "Athens", "Dublin", "Edinburgh", "Cardiff" };
char x[20];
int i;
printf("请输入国家名");
scanf("%s", &x);
int count = sizeof(m) / 4;
for (i = 0; i < count; i++)
{
if (strcmp(m[i], x) == 0)
{
printf("%s的首都为%s!", m[i], n[i]);
break;
}
}
if (i == count)
{
printf("你输入的国家%s没有找到它的首都!", x);
}
}
可运行代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *m[]= {"Australia","Belgium","China","Denmark","England","France","Greece","Ireland","Scotland","Wales"};
char *n[]= {"Canberra","Brussels","Beijing","Copenhagen","London","Paris","Athens","Dublin","Edinburgh","Cardiff"};
char x[20];
int i ;
printf("请输入国家名:\n");
scanf("%s",x);
for(i = 0;i < 10;i++)
{
if(strcmp(x,m[i]) == 0)
{
printf("%s的首都为%s!\n",m[i],n[i]);
break;
}
}
if(i==10)
printf("你输入的国家%s没有找到它的首都!\n");
return 0;
}
结果:
1: x[20]越界了。
2: 不能比较字符串,那样是比较他们的首地址呢。可以用strcmp函数。
3: printf("你输入的国家%s没有找到它的首都!"); 这里没有第二个参数。要在后面加上 ,x 。
char *m[]= {"Australia","Belgium","China","Denmark","England","France","Greece","Ireland","Scotland","Wales"};
char *n[]= {"Canberra","Brussels","Beijing","Copenhagen","London","Paris","Athens","Dublin","Edinburgh","Cardiff"};
char x[20];
int i ;
bool bFind = false;
printf("请输入国家名");
scanf("%s", &x[0]);
for(i = 0; i < sizeof(m) ;i++)
{
if(strcmp(m[i], x) == 0)
{
printf("%s的首都为%s!",m[i],n[i]);
bFind =true;
break;
}
}
if(!bFind)
{
printf("你输入的国家%s没有找到它的首都!");
}