#include<stdio.h>
void main()
{
char str1[100];
char str2[100];
printf("\n Enter the first String\n");
scanf("%[^\n]s",str1);
printf("Enter the second String");
scanf("%[^\n]s",str2);
printf("\n The strings are %s %d \n",str1,i);
}
答案 0 :(得分:1)
由于您想阅读整行,请使用fgets
。至少你可以控制字符串长度输入,而不需要处理scanf
特性
printf("\n Enter the first String\n");
fgets(str1, 100, stdin);
printf("Enter the second String");
fgets(str2, 100, stdin);
printf("\n The strings are %s %s \n",str1,str2);
请注意,尾随\n
仍在字符串中(如果它们最长为98个字符)。
答案 1 :(得分:0)
嗯,你要按 Enter ,RequestData
保留在'\n'
中,在第二个stdin
中作为字符串使用。
您可以在两个scanf()
之间放置一个虚拟getchar()
。这样可以解决问题,因为它会消耗前scanf()
未使用的'\n'
。
你说你正在阅读scanf
的方式 - 你基本上是在阅读由word
分隔的行。
更好的方法是使用'\n'
。它有两种方式可以解决fgets()
消费问题,另一方面是\n
会读取一行,并提供比fgets()
更好的控制。
没有。情况并非如此,它是从您输入的上一行读取scanf()
。
关于\n
,您应该了解的一些事情。它也会消耗fgets
。因此,您的字符串将包含\n
字符。如果您不想要,那么您可以这样做
\n
str[strcspn(str,"\n")]='\0'
char *fgets(char * restrict s, int n, FILE * restrict stream);
函数最多读取的数量少于1 由fgets
指向的流n
指定的字符 进入stream
指向的数组。不会读取其他字符 在换行符后(保留)或文件结束后。一个 在最后一个字符读取后立即写入空字符 进入阵列。
同时检查s
的返回值以了解其是否成功。
如果遇到(EOF)文件结尾且未读取任何字符,fgets()
将返回fgets
。
所以代码将是
NULL
所以在这里你可以输入字符串,但同时输入if( fgets(str1, 100, stdin) ){
// successfully read the string.
str1[strcspn(str1,"\n")]='\0'; ///removing `'\n'`
}
。如果通话成功,我们会覆盖它。
\n