C语言初学者:帮忙看下这个简单的问题(小写变大写)

我原本输入一串字符,会输出一串大写字母,然后插入光标跟在大写字母后面,但后来不知怎么着插入光标变成另起一行了,我想知道原来光标跟在大写字母后面的程序是什么样子的。
#include<stdio.h>
main()
{
char c;
while(c!=EOF)
{
c=getchar();
if(c>='a'&&c<='z')
{c=c-'a'+'A';
printf("%c",c);}
else
{printf("%c",c);}
}
}

一共改了2个小点。印象里,回车符是23,是10+13,回车键实际是回车(光标到行首)+换行

#include<stdio.h>

main()

{

      char c;

      while((c=getchar())!=10) /*这里改了一下 输入的同时判定是否循环*/

      {   /*c=getchar(); 被移到while()条件中*/

      if(c>='a'&&c<='z')

      {c=c-'a'+'A';

      printf("%c",c);}

      else

      {printf("%c",c);}

      }

      scanf("%d");  /*纯dos中调试不用这一行。主要用于停在输出屏幕*/

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-01
首先函数在读取标准输入这个文件描述符时是带缓冲的输入,带缓冲的意思就是说输入的字符不会马上被读取而是与上回车后再读取。关于循环次数的问题这个应该没有办法避免不读取,因为回车也是一个正确的字符,但是要使循环次数正确完全可以加判断,如果是回车字符的话就不增加循环计数。
第2个回答  2012-10-30
# include<stdio.h>
main()
{
char c;
while(c!=EOF)
{
c=getchar();
if(c>='a'&&c<='z')
{c=c-'a'+'A';
printf("%c",c);}
else
if( c == '\n' )
{
continue;
}
else
{printf("%c",c);}
fflush(stdin);
}
}

测试已经可以运行,主要是getch在获取输入时把回车符也读取了,所以在要判断是否为回车符,这个在linux下面可以运行追问

把回车符也读了……应该是这样。我感觉我的编译器有点问题,getchar似乎也会把回车读取,导致循环次数不对,请问能解决吗?

追答

首先函数在读取标准输入这个文件描述符时是带缓冲的输入,带缓冲的意思就是说输入的字符不会马上被读取而是与上回车后再读取。关于循环次数的问题这个应该没有办法避免不读取,因为回车也是一个正确的字符,但是要使循环次数正确完全可以加判断,如果是回车字符的话就不增加循环计数。

本回答被提问者和网友采纳
第3个回答  2012-10-30
只用标准库好像不行追问

程序是可以正常运行的

追答

我是说原来光标跟在大写字母后面好像用标准库实现不了

相似回答
大家正在搜