我陷入了一个书中给出的问题。问题是-
典型的网络新手是一个叫B1FF的家伙,他有一种独特的方式来传达信息
H3Y哑光,C 15 R1LLY C00L
编写“B1FF filter”,读取用户输入的消息并将其转换为B1FF speak:
输入信息:嘿,伙计,C很酷
在B1FF中发言:H3Y DUD3,C 15 R1LLY C00L
你的程序应该把信息转换成大写字母,用数字代替某些字母(A=4,B=8,E=3,I=1,O=0,S=5)。
我的程序-
#include<stdio.h>
int main()
{
char arr[50]={0},ch[50]={0};
int i=0;
printf("\nenter the sentence : ");
while(arr[i-1]!='\n')
{
scanf("%c",&arr[i]);
i++;
}
i=0;
while(arr[i]!='\n')
{
if(arr[i]=='e')
ch[i]='3';
if(arr[i]==('A'||'a') )
ch[i]='4';
if(arr[i]==('B'||'b'))
ch[i]='8';
if(arr[i]==('I'||'i'))
ch[i]='1';
if(arr[i]==('o'||'O'))
ch[i]='0';
if(arr[i]==('S'||'s'))
ch[i]='5';
else ch[i]=arr[i]-32;
i++;
}
ch[i]='\n';
i=0;
printf("\nIn B1FF-SPEAK : ");
while(ch[i]!='\n')
{
printf("%c",ch[i]);
i++;
}
printf("\n");
return 0;
}
程序输出-
我不明白为什么程序不转换字母,为什么
scanf()
不接受space
作为字符? 最佳答案
首先,你不能像
if(arr[i]==('A'||'a') )
得到你所期望的,因为这将归结为一个永远真实的条件。[
('A'||'a')
计算结果为TRUE]你必须使用
if ( (arr[i]=='A') || (arr[i] =='a'))
也就是说,
ch[i]=='8';
,ch[i]==1;
基本上是空语句。您正在比较并丢弃比较结果。如果你想分配任务,你需要使用=
。else ch[i]=arr[i]-32;
只与前面的if
语句绑定,而不与整个if
链绑定。您可以使用switch
case或if-else if-else
构造来处理该部分。您没有单独处理空白。
为了详细说明,由于上面的第二点,您的代码基本上减少到
while(arr[i]!='\n')
{
if(arr[i]==('S'||'s')) //always false
ch[i]='5';
else ch[i]=arr[i]-32; //always TRUE
i++;
}
这只是把小写字母转换成大写字母的一个错误尝试。如果字符串中有非alpha输入,则代码将爆炸。
也就是说,关于
为什么
scanf()
不接受空格作为字符?部分,
scanf()
完全接受一个空格作为%c
的输入,你只是通过盲目地从NUL
中减去null
来转换它而不是32
(space
)。ANUL
是不可打印的,不出现在输出中。关于c - 为什么程序会产生意外的输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39532817/