使用C语言输入字符串,不被换行符截断

迪司匹林 2013-09-15 11:11:56
使用C语言输入字符串,不被换行符截断
即:输入多行字符串
解答需保证:
1.多行
2.整个字符串不能
有标志结束的字符出现
(主要是这个问题,有的人说用EOF控制,按Ctrl+C,但是不行啊,命令行会直接退出)

输入例子:
12346 adasfd
sfdafa asfdas546
asfdasdf

则输出:
12346 adasfd
sfdafa asfdas546
asfdasdf

问题描述的不大清楚,但感觉这个问题各位大侠应该遇到过
望赐教!!!
...全文
744 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2013-09-17
  • 打赏
  • 举报
回复
引用 13 楼 AILOONG 的回复:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char str[1024] = {'\0'};
	int i = 0;
	char ch;
    ch = getchar();
	while(ch != EOF)
	{
		str[i] = ch;
		i++;
		ch = getchar();
	}
	printf("%s", str);
	return 0;
}
要说这代码可能出现的问题嘛 getchar的返回值是int类型 你的ch的数据类型是char 所以可能会导致BUG 你把char ch换成int ch;
迪司匹林 2013-09-17
  • 打赏
  • 举报
回复
引用 10 楼 AILOONG 的回复:
[quote=引用 9 楼 max_min_ 的回复:] 输入用ch = getchar() 试试
OK啦,多谢 不过中断输入不是Ctrl+Z 而是Ctrl+C[/quote]

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char str[1024] = {'\0'};
	int i = 0;
	char ch;
    ch = getchar();
	while(ch != EOF)
	{
		str[i] = ch;
		i++;
		ch = getchar();
	}
	printf("%s", str);
	return 0;
}
不好意思,刚刚发现这段代码有个bug,具体说不清 反正这个bug很怪异,而且这个bug是在VS2008测试出的, 如果在VC6.0中按“Ctrl+C”后则直接退出了程序 这个bug让我很无解,想深入研究也不知从何着手啊 深感水太深啊,这么小的问题,居然解决了这么长时间
迪司匹林 2013-09-17
  • 打赏
  • 举报
回复
引用 11 楼 lin5161678 的回复:
[quote=引用 4 楼 lin5161678 的回复:]
那个^Z 就是EOF 而已 另外 按照你提的问题 样例输入没什么关系 如果是ACM 发现好了 没这样的要求 一个输入对应对应一个输出就可以了[/quote]

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char str[1024] = {'\0'};
	int i = 0;
	char ch;
    ch = getchar();
	while(ch != EOF)
	{
		str[i] = ch;
		i++;
		ch = getchar();
	}
	printf("%s", str);
	return 0;
}
不好意思,刚刚发现这段代码有个bug,具体说不清 反正这个bug很怪异,而且这个bug是在VS2008测试出的, 如果在VC6.0中按“Ctrl+C”后则直接退出了程序 看来目前只能采用你的方法了,但这个bug让我很无解 想深入研究也不知从何着手啊
max_min_ 2013-09-16
  • 打赏
  • 举报
回复
引用 8 楼 AILOONG 的回复:
[quote=引用 6 楼 max_min_ 的回复:]

  while(ch)
//你代码判断是ch 和中断输入有什么关系?

while(ch != EOF)
//这样吧
不行的,我也尝试,刚刚又试过了[/quote] 输入用ch = getchar() 试试
迪司匹林 2013-09-16
  • 打赏
  • 举报
回复
引用 6 楼 max_min_ 的回复:

  while(ch)
//你代码判断是ch 和中断输入有什么关系?

while(ch != EOF)
//这样吧
不行的,我也尝试,刚刚又试过了
迪司匹林 2013-09-16
  • 打赏
  • 举报
回复
引用 4 楼 lin5161678 的回复:
中间多了个^Z 有些编程题目要求按照“样例输入”的格式才行 比如: 如果按照大侠你的,似乎提交后,系统的自动测试用例会不通过的
max_min_ 2013-09-16
  • 打赏
  • 举报
回复

  while(ch)
//你代码判断是ch 和中断输入有什么关系?

while(ch != EOF)
//这样吧
迪司匹林 2013-09-16
  • 打赏
  • 举报
回复
引用 3 楼 max_min_ 的回复:
[quote=引用 2 楼 AILOONG 的回复:] [quote=引用 1 楼 max_min_ 的回复:] 不能提供结束输出标示,而且不知道字符串的个数 那除了eof还有啥?
我的意思是:我用了EOF控制,但不行啊 如果你使用EOF的话,这段代码要如何写呢? [/quote] window下 按 ctrl +z ; Linux 下 按 ctrl +d[/quote] 大侠,始终没有贴出代码,我的代码如下

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char str[1024] = {'\0'};
	int i = 0;
	char ch;
	scanf("%c", &ch);
	while(ch)
	{
		str[i] = ch;
		i++;
		scanf("%c", &ch);
	}
	printf("%s", str);

	return 0;
}
使用Ctrl+Z是无法中断标准输入的,已试过
lin5161678 2013-09-16
  • 打赏
  • 举报
回复
max_min_ 2013-09-16
  • 打赏
  • 举报
回复
引用 2 楼 AILOONG 的回复:
[quote=引用 1 楼 max_min_ 的回复:] 不能提供结束输出标示,而且不知道字符串的个数 那除了eof还有啥?
我的意思是:我用了EOF控制,但不行啊 如果你使用EOF的话,这段代码要如何写呢? [/quote] window下 按 ctrl +z ; Linux 下 按 ctrl +d
迪司匹林 2013-09-16
  • 打赏
  • 举报
回复
引用 1 楼 max_min_ 的回复:
不能提供结束输出标示,而且不知道字符串的个数 那除了eof还有啥?
我的意思是:我用了EOF控制,但不行啊 如果你使用EOF的话,这段代码要如何写呢?
迪司匹林 2013-09-16
  • 打赏
  • 举报
回复
引用 11 楼 lin5161678 的回复:
那个^Z 就是EOF 而已 另外 按照你提的问题 样例输入没什么关系 如果是ACM 发现好了 没这样的要求 一个输入对应对应一个输出就可以了
是的,我刚刚吃饭的时候想了想,大侠你的也是正解; 不过,感觉下面代码更好点儿

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char str[1024] = {'\0'};
	int i = 0;
	char ch;
        ch = getchar();
	while(ch != EOF)
	{
		str[i] = ch;
		i++;
		ch = getchar();
	}
	printf("%s", str);
	return 0;
}
不会出现我说的那个情况,不过需要按Ctrl+C中断输入,而不是Ctrl+Z
lin5161678 2013-09-16
  • 打赏
  • 举报
回复
引用 7 楼 AILOONG 的回复:
[quote=引用 4 楼 lin5161678 的回复:]
中间多了个^Z 有些编程题目要求按照“样例输入”的格式才行 比如: 如果按照大侠你的,似乎提交后,系统的自动测试用例会不通过的[/quote]那个^Z 就是EOF 而已 另外 按照你提的问题 样例输入没什么关系 如果是ACM 发现好了 没这样的要求 一个输入对应对应一个输出就可以了
迪司匹林 2013-09-16
  • 打赏
  • 举报
回复
引用 9 楼 max_min_ 的回复:
输入用ch = getchar() 试试
OK啦,多谢 不过中断输入不是Ctrl+Z 而是Ctrl+C
max_min_ 2013-09-15
  • 打赏
  • 举报
回复
不能提供结束输出标示,而且不知道字符串的个数 那除了eof还有啥?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧