吉大机试题目 求字符串的反码。 http://ac.jobdu.com/problem.php?pid=1105
一般会按照普通C语言的习惯,输入用SCANF。但是,我们都忽略了,SCANF 对于空格,回车,TAB ,的处理是当做结束符的。回想很久前学习C语言输入多个 变量时,中间会用 空格,老师会告诉我们,空格和回车都行。但是我们却不知道 其中的原理是什么。近日开始温习编程基础,一下手就出错,想到了就写下来。
有多久没写技术博客,离开了 编程有多久,算一算吧,有一年半了,最近的编程还是在写MATLAB。。刚开始上路就为了其他事情丢下来。意识到时以晚,只能抓紧时间拼命弥补各个方面的不足。向世界默默地宣告一声“I AM BACK!”
***********************************************************************************************************************************************************************************************************************************
功能:输入字符串
格式: scanf("%s",s);
gets(s);
注: s定义: char s[N] 或者是 char * s
用法注意: scanf ,输入一个字符串后会自动添加'\0' ;但是遇到 空格, 回车,制表符 会结束。
所以若要输入空格,回车,要用gets();
代码:
#include<stdio.h>
#include<string.h>
#define N 90
int main()
{
char s[N];
int i=0;
while(1)
{
//scanf("%s",s);
gets(s);
if(s[0]=='!'&&strlen(s)==1) break;
i=0;
while(s[i]!='\0')
{
if(s[i]<=90&&s[i]>=65)
printf("%c",155-s[i]);
else if(s[i]<=122&&s[i]>=97)
printf("%c",97+122-s[i]);
else
printf("%c",s[i]);
i++;
}
printf("\n");
}
return 0;
}
这样是正确的,可以处理空格,回车符。但是若用scanf会报PE的错误。就是在于,scanf读不入空格,运行结果会丢失空格。