```
/*输入一段文字
输出
输入一段字符,以stop作为最后输入的字符串。
测试说明
样例输入:
My name is Amy
My name is Jane
stop
样例输出:
11 name
12 name
提示:
字符串长度不超过100。*/
#include<stdio.h>
#include<string.h>
int main( )
{
while(1)
{
int max=0,i;
char a[100]={0},s[100]={0};
scanf("%s",a);
if(getchar()=='\n'&&strcmp(a,"stop")!=0) {printf("%d %s\n",max,a);}
else if(strcmp(a,"stop")==0) {break;}
else
{
if(max<strlen(a))
{
max=strlen(a);
for(i=0;i<strlen(a);i++) {s[i]=a[i];}
}
}
}
return 0;
}```
用scanf("%s", a); 输入字符串,碰到空格即认为输入结束,所以想输入“My name is Amy” ,其实只读入了 “My“ 就结束了。题主代码这么改下,供参考:
#include<stdio.h>
#include<string.h>
int main()
{
int max = 0, i, lens = 0; // 修改
char a[100] = { 0 }, s[100] = { 0 }; // 修改
while (1)
{
scanf("%s", a);
if (strcmp(a, "stop") == 0) break;
lens += strlen(a); // 修改
if (max < strlen(a))
{
max = strlen(a);
for (i = 0; i < strlen(a); i++) { s[i] = a[i]; }s[i] = '\0'; // 修改
}
if ((getchar()) == '\n') //&& strcmp(a, "stop") != 0) // 修改
{
printf("%d %s\n", lens, s); // 修改
max = 0; lens = 0;
}
}
return 0;
}
在该代码中,scanf() 函数读取一个字串并将其存储在字符数组 a 中。接着,getchar() 函数从输入缓冲区中读取下一个字符,如果这个字符是一个空格,则说明刚才读取的字串已经结束,程序可以统计它的长度和内容,并对最大长度进行更新;否则,我们可以假设更多的字符将随后到达,所以需要继续等待输入。
由于 scanf() 函数默认会忽略所有的空格或者换行符,因此在读取字符串时无法获取其中的空格字符,必须使用 fgets() 或者 gets() 函数来读取包含空格的字符串。另外,在 getchar() 函数返回值为 '\n' 时,可以判断刚才读取的字符串已经结束,比较适合处理一行文本的情况。
因此,对于这段代码,如果字符串 a 内部包含空格字符,那么 scanf() 函数只能读取第一个子字符串直到遇到空格字符为止,其余部分将被丢弃。这意味着 getchr() 函数接收不到空格字符,也就无法正确识别字符串的结束条件。
单个字符的话scanf和getchar都能接收到;
很多个字符串的话只能用scanf函数或其它函数,但是遇到空白字符就停止接收了……
void main()
{
char ch;
ch = getch();
printf("Input Char Is :%c",ch);
}
Output:可以通过使用getchar()函数接收空格符号。因为getchar()函数会依次读取用户键入缓存区的一个字符,只要空格符号在缓存区中,getchar()函数就能够读取到。以下是示例代码:
#include <stdio.h>
int main() {
char c;
printf("请输入字符串:");
while ((c = getchar()) != '\n') {
putchar(c);
}
printf("\n");
return 0;
}
上述代码会接收一个字符串并输出,其中while循环通过不断调用getchar()函数来获取每个字符,直到读取到换行符为止。在输入字符串时,只要在字符串中加入空格符号,getchar()函数就能够正确读取。