2 throne jk throne_JK 于 2014.11.23 17:24 提问

关于C语言字符的问题--新手求助

#include
void main()
{
int i;
char a[80];
i=0;
while((a[i]=getchar())!='\n')
i++;
a[i]='\0';
for(i=0;a[i]!='\0';i++)
{ if('A'<=a[i]&&a[i]<='Z')
a[i]=(155-a[i]);
putchar(a[i]);
}
printf("\n");
}

for语句中为什么不可以将循环终止条件换为'\n' 即以回车符为终止条件程序输出结果后会无限进行下去

额 是不是那个第一句里的回车符没有输入 到 a[i] 中

5个回答

tractor_man
tractor_man   2014.11.23 18:11

跳出while((a[i]=getchar())!='\n')这句的时候a[i] = '\n';
然后执行a[i] = '\0';这句就把之前的a[i]中的'\n'覆盖了。

throne_JK
throne_JK   2014.11.23 17:32

额 是不是那个第一句里的回车符没有输入 到 a[i] 中

su_xiaoyan
su_xiaoyan while((a[i]=getchar()) != '\n')
3 年多之前 回复
llp1992
llp1992   2014.11.23 20:12

while((a[i]=getchar())!='\n')这一句执行完要跳出的时候,也就是你按下回车的时候,此时a[i]已经在whilede 括号内赋值为'\n',但是while条件不满足,所以i++这句没有执行,执行了后面的a[i]='\0'; 这句把a[i]的值从'\n'覆盖为'\0',所以char 数组中并没有'\n'这个字符,所以for循环会一直执行

eagleyan
eagleyan   Rxr 2014.12.01 05:28

tractor_man是对的,如果你需要那个\n保留下来,简单的修改就可以

while((a[i]=getchar())!='\n')
i++;
修改成
while((a[i++]=getchar())!='\n');

ajtdnta
ajtdnta   2014.12.10 14:26

因为当接收到'\n'时循环条件 while((a[i]=getchar())!='\n') 不成立,从而终止了循环。正确的做法是。
while(1)
{
a[i] = getchar();
if(a[i] == '\n'){
break;
}

}

这样你的循环终止条件就可以用'\n'作为终止条件了。
另外,你的问题描述不够清楚,要加强一下描述问题的功夫。
还有,你的程序存在很多问题,至少我可以说出 5个。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言算法之枚举法(acm例题)
里面有大量的习题,和答案,其中大部分是acm例题
关于C语言的面试问题
今天,参加了一个公司的面试,下面写一下一些感想和想法。 那个公司叫高知特信息技术(上海)有限公司,还是个美国财富500强,上市公司。听那个宣讲人说的很牛X的。 那个宣讲人大致给我们介绍了一下情况。就是高知特信息技术有限公司上海分公司委托他们公司招聘25名工程师,并 且包括培训业务。他们是个培训公司,经常和大公司合作招聘和培训,然后往公司里输送人才。 大家都知道,世界500强公司
与字符串有关的一些典型问题的C++解法
一、C++中String类的用法总结 http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html http://www.cnblogs.com/gaojun/archive/2010/09/11/1824016.html http://www.cnblogs.com/ggjucheng/archive/201
C语言中的字符与字符串学习小结
软件编程到底难不难呢?简单的写个小玩意儿似乎也不需要什么太多的知识或者技巧,但是往深了看,每一门编程语言似乎精细奥妙的多。C语言便是一个我用了许久但是始终没有搞明白的一门编程语言。 今天学习了解到的新知识点,关于字符与字符串: 1,用单引号引起的字符,本质上代表的是一个数字; 2,用双引号引起的字符串代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制为0的字
C语言出现“烫”字符的内存分析
近来看网上好评颇高的C++反汇编与逆向技术揭秘一书,结合以前看过的零零散散的知识,对比印证,收获颇多,联想起大学时候刚学C语言时候碰到输出字符串时偶尔会输出‘烫’字符的异常情况时百思不得其解的情况,于是就写了这个小文章,希望可以解开一些C语言初学者的疑惑。 几个基础知识 1:栈的定义    栈是一种先进后出的存储方式,在C等高级语言里面,是通过数据结构来实现的,而汇编则可以使
C语言中的二维数组问题
在《C和指针》Page157中讲到多维数组(例matrix[3][10])时,*(matrix+1)+5是一个指向matrix[1][6]的指针,等同于matrix[1]+5.而*(*(matrix+1)+5)就是matrix[1][6]. 在这里matrix表示一个指向若干整型元素数组的指针.      而《C陷阱与缺陷》的第三章-语义"陷阱",讲到指针与数组的关系时,作者提到"C语言只有一维
C语言中字符和数字的问题
这个问题对我来说真的很烦,看了忘,忘了看。1.首先我们来讨论一下字符'0'和数字'0'的区别。1.数据类型不同,数字型有int .long 之分,字符型有char,浮点型有float,double。  如果用十六进制表示,数字0位0x00,字符'0'为0x30.2.数字与字符之间的转换:(1)代码一:字符+数字=数字(会被强转成数值类型) #include&amp;lt;stdio.h&amp;gt;int ma...
C语言基础(新手)---贪吃蛇代码参考交流~~~
本人小白,欢迎逛楼大佬指导和交流。现阶段只在15pb学习C语言(c++),所以代码都是C语言(注释也是比较多.....)。写贪吃蛇的时候还不熟悉c++的类的部分,也没有分装文件,所以直接就是按C语言的意思直接写上// snake.cpp : 定义控制台应用程序的入口点。 // #include &quot;stdafx.h&quot; #include &amp;lt;iostream&amp;gt; #include &amp;lt;w...
c语言项目(强力推荐,适合进阶和初学者学习)
c语言项目代码,内容分析透彻,适合进阶的人自学的良好的材料
c语言中整数赋值和字符赋值的一些问题
int i=289 char c='a'; c=i;这个问题,因为char是一个8位的存贮结构,你把一个16位的int的结构赋值给了它,结果只能是把高位的丢掉,所以i被减了256以后赋值给了c,即低位部分赋值给了c你在c='a'时,c存的是97但你后来把i也就是289给了c,所以值溢出了,(为什么这里i被剪掉的是256呢,这个256是怎么算出来的?) 补充:289是10进制 转换到8进制是000