现在的位置: 首页 > 综合 > 正文

涉及到ASSCI码细节的gets()函数和getchar()函数?

2018年05月19日 ⁄ 综合 ⁄ 共 766字 ⁄ 字号 评论关闭

贴一个简单的Oj题目,重点是gets()顺利通过,getchar()不行。希望有缘人指教......

题目描述

输入一串字符,将其中的大写变成小写,若不为大写则原样输出

输入

任意字符串(长度在100以内)以回车表示输入结束

输出

将其中的大写 输出相应的小写,若不为大写则原样输出

样例输入

A123b

样例输出

a123b

gets()版:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main()
{
	char arr[100];
	unsigned len, j, i = 0;

	gets(arr);
	len = strlen(arr);
	for (i = 0; i < len; i++)
	{
			if (isupper(arr[i]))	// 如果是大写,转换成小写
				arr[i] = tolower(arr[i]);
			else
				continue;	// 如果不是大写,继续
	}
	

	for (j =0; j < i; j++)
		printf("%c", arr[j]);

	return 0;
}

getchar()版:

#include <stdio.h>
#include <ctype.h>

int main()
{
	char ch, arr[100];
	unsigned i = 0, j;

	while (ch = getchar())
	{
		if (ch == 0x0a)			// 检测到回车符停止输入
			break;
		else
		{
			if (isupper(ch))	// 如果是大写,转换成小写后存入数组
				arr[i] = tolower(ch);
			else
				arr[i] = ch;	// 不是大写,直接存入数组
			i++;
		}
	}

	for (j =0; j < i; j++)
		printf("%c", arr[j]);

	return 0;
}

测试了半天两个输入输出都一模一样,个人认为是getchar()和gets()函数细节上的差异导致的。求大牛指教!

顺便附上ASCII码完整表供参考:



抱歉!评论已关闭.