我想读取输入的所有文本,直到输入新行字符。
这是我的代码。
int i=0;
char ch[MAX];
printf("Enter the text\n");
while(true)
{
scanf("%c",&ch[i]);
if(ch[i]=='\n')
break;
i++;
}
但当我尝试执行时,它只读取一个单词。
我也尝试过scanf("%s",ch);
但结果是一样的。
将评论转移到答案。
你的代码会起作用。您发布的代码会扫描所有内容,直到出现换行符(\n
)被发现。但作为乔纳森·莱夫勒评论说,你永远不会以 NUL 结尾你的字符串。只需使用
ch[i]='\0';
循环之后。此外,用户可以输入的字符数多于MAX-1
(额外的一个\0
在最后)这可能会导致缓冲区溢出。您应该添加一个检查,例如
if(i==MAX-1)
break;
就在你之前scanf
以防止其溢出。
注意scanf("%s",ch);
将扫描直到遇到空格或换行符。
Instead of looping and scanning character by character, just use
scanf("%[^\n]",ch);
getchar();
以上scanf
扫描所有内容,直到找到换行符并将其放入ch
. The getchar()
然后丢弃\n
来自stdin
。您还可以通过限制字符数量来提高安全性scanf
读入ch
.
scanf("%49[^\n]",ch);
以上scanf
将扫描最多 49 个字符并添加\0
在最后。您可以替换的值MAX-1
那里。我以 50 为例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)