关于c语言中会回车键的功能
我以前问过别人告诉我说是执行和换行两个字符那请问是先换行还是现执行而执行指的又是什么是指把数据从键盘缓冲区送到计算机内还是指命令程序运行其实我是不太明白在以字符串形式向二...
我以前问过别人告诉我 说是 执行 和换行两个字符 那请问是先换行还是现执行 而执行指的又是什么 是指把数据 从键盘缓冲区 送到计算机内 还是指 命令程序运行
其实我是不太明白 在以字符串形式 向二位字符数组中的一位数组分别 输入字符串时 在gets();前面加的那个getchar();所获得的是哪个字符?biru
void input(int num[],char name [])
{int i;
for(i=0;i<N;i++)
printf("input NO.:");
scanf("%D",&num[i]);
printf("input name:");
getchar();
gets(name[i]);
}
请问这个getchar();获得是哪个字符;在输入完数字后按下回车 紧接着输入字符;我试过如果不加getchar();再输入数字后按下回车 会直接输入input name:input NO.:也就是说跳过了字符输入 而gets获得了一个结束字符 所以跳过了 可是那个字符是什么 换行吗?如果换行符在输入到字符数组中后字符数组结束 也就是说换行符实际上='\0'?
可是为什么在按下回车后 input name:input NO.:会在下一行输出 如果说换行备gets();获得不应该不输出换行吗 况且在输入完 整形数据后 换行并没有被接收 它属于屏幕控制字符 不应该紧接着输入吗? 展开
其实我是不太明白 在以字符串形式 向二位字符数组中的一位数组分别 输入字符串时 在gets();前面加的那个getchar();所获得的是哪个字符?biru
void input(int num[],char name [])
{int i;
for(i=0;i<N;i++)
printf("input NO.:");
scanf("%D",&num[i]);
printf("input name:");
getchar();
gets(name[i]);
}
请问这个getchar();获得是哪个字符;在输入完数字后按下回车 紧接着输入字符;我试过如果不加getchar();再输入数字后按下回车 会直接输入input name:input NO.:也就是说跳过了字符输入 而gets获得了一个结束字符 所以跳过了 可是那个字符是什么 换行吗?如果换行符在输入到字符数组中后字符数组结束 也就是说换行符实际上='\0'?
可是为什么在按下回车后 input name:input NO.:会在下一行输出 如果说换行备gets();获得不应该不输出换行吗 况且在输入完 整形数据后 换行并没有被接收 它属于屏幕控制字符 不应该紧接着输入吗? 展开
3个回答
2012-05-02
展开全部
你说的执行是回车符吧('\r', 0x0d), 在这里你可以无视它. 你在按下回车键时,实际读入输入缓冲区的只有一个换行符('\n', 0x0a)。
scanf("%d",&num[i]);执行后, 你输入数字123, 按回车,输入缓冲区的内容是"123\n". 这时数字被scanf读纯春入, 但是输入缓冲区里还有一个'\n'配枯. getchar()把'\n'取出,以免影培裤洞响gets. 而gets在遇到'\n'时会停止读数据,所以如果不用getchar取出'\n', gets遇到'\n'立即停止,只能读到一个空串, '\0'. 这个'\0'是gets自己添加到字符串尾的,读不到数据就会有这样一个字符,这个是字符串结束标志,并非读到的字符。
scanf("%d",&num[i]);执行后, 你输入数字123, 按回车,输入缓冲区的内容是"123\n". 这时数字被scanf读纯春入, 但是输入缓冲区里还有一个'\n'配枯. getchar()把'\n'取出,以免影培裤洞响gets. 而gets在遇到'\n'时会停止读数据,所以如果不用getchar取出'\n', gets遇到'\n'立即停止,只能读到一个空串, '\0'. 这个'\0'是gets自己添加到字符串尾的,读不到数据就会有这样一个字符,这个是字符串结束标志,并非读到的字符。
更多追问追答
追问
其实我也是这样想的 可是既然换行符被getchar();获得 ,input name:input NO.:为什么会在下一行输出 ?还有我想问一下回车符"\r" 它的功能是什么?是执行吗?也就是读入输入缓冲区的?还是说读入输入缓冲区的的字符这个功能 实际上是不存在控制字符的?
追答
你说下一行输出是什么意思?如果,延迟输出,那是因为行缓冲,立即输出用fflush(stdout).
'\r'在这里没有用到。你按回车键后,终端驱动和键盘驱动产生一个'\n', 交给输入流。输入流最终得到只有'\n'。控制字符的语义,本质上还是由驱动决定。你说得那些控制字符,是对老式打印机而说的吧。对于老式打印机, '\r'的的语义: "回车(CR)意为将字符放置于纸边开始打印处(可能要移动到下一行,也可能不是)。"。不同环境下,这些字符有不同的含义。 在这里,你的输入里没有出现'\r', 完全可以无视这些。
你贴的代码有问题,给你改了一下:
#include
#define N 10
#define NAME_SIZE 81
void input(int num[],char name [][NAME_SIZE])
{
int i;
for(i=0;i<N;i++){
printf("input NO.:");
scanf("%d",&num[i]);
printf("input name:");
getchar();
gets(name[i]);
printf("%s\n", name[i]);
}
}
void main()
{
int num[N];
char name[N][NAME_SIZE];
input(num, name);
}
展开全部
1、换行是光标从当前位置换到下一行;
回车是光标从当前位置回到本行的行首;
换行回车效果就是前面两个效果的叠模握加,也就是换到下一旦坦庆行,并回到行首
2、回车符是Carriage Return, C语言中是'\r'
换行符是Line Feed, C语言中是'\n'
回车换行符实际是信肆两个字符, 就是\r\n
回车是光标从当前位置回到本行的行首;
换行回车效果就是前面两个效果的叠模握加,也就是换到下一旦坦庆行,并回到行首
2、回车符是Carriage Return, C语言中是'\r'
换行符是Line Feed, C语言中是'\n'
回车换行符实际是信肆两个字符, 就是\r\n
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/r
scanf("%d",&num[i]);执行后, 你输入数字123, 按回车,输入缓冲区的内容是"123\n". 这时数字被scanf读入, 但是输入缓冲区谨码举里还有一个'\n'. getchar()把'\n'取出,以免影响gets. 而gets在遇到'\n'时会停止读数据,所模碧以如果不用getchar取出'\n', gets遇到'\n'立即停止,只能读到一个空串, '\0'. 这个'\0'是gets自己添加到字符串尾的,读不到数据就会有这样一个字符,这个是字符串结束标志,并非读到的字符祥碧。
OK
scanf("%d",&num[i]);执行后, 你输入数字123, 按回车,输入缓冲区的内容是"123\n". 这时数字被scanf读入, 但是输入缓冲区谨码举里还有一个'\n'. getchar()把'\n'取出,以免影响gets. 而gets在遇到'\n'时会停止读数据,所模碧以如果不用getchar取出'\n', gets遇到'\n'立即停止,只能读到一个空串, '\0'. 这个'\0'是gets自己添加到字符串尾的,读不到数据就会有这样一个字符,这个是字符串结束标志,并非读到的字符祥碧。
OK
追问
其实我也是这样想的 可是既然换行符被getchar();获得 ,input name:input NO.:为什么会在下一行输出 ?还有我想问一下回车符"\r" 它的功能是什么?是执行吗?也就是把缓冲区的内容送到计算机里?还是说读入输入缓冲区的的字符这个功能 实际上是不存在控制字符的?
追答
是的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询