我被要求在C中完成工作,我应该从输入读取,直到有空格,然后直到用户按下回车键。 如果我这样做:
scanf("%2000s %2000s", a, b);
它将遵循第一条规则而不是第二条规则 如果我写:
I am smart
我得到的相当于:
a =“我”;
b =“am”;
但它应该是:
a =“我”;
b =“很聪明”;
我已经尝试过:
scanf("%2000s %2000[^\n]\n", a, b);
和
scanf("%2000s %2000[^\0]\0", a, b);
在第一个中,它等待用户按 Ctrl + D (发送EOF),这不是我想要的。 在第二个,它不会编译。根据编译器:
警告:'%['格式
没有关闭']'
有什么好方法可以解决这个问题吗?
答案 0 :(得分:36)
scanf
(和表兄弟)有一个稍微奇怪的特征:格式字符串中的任何空格(扫描集之外)与输入中任意数量的空白区域相匹配。碰巧,至少在默认情况下" C" locale,new-line被归类为white space。
这意味着尾随'\n'
不仅会尝试匹配 a 换行符,还会尝试匹配任何后续的空白行。在您发出输入结束信号之前,它不会被视为匹配,或者输入一些非空格字符。
要解决这个问题,您通常需要执行以下操作:
scanf("%2000s %2000[^\n]%c", a, b, c);
if (c=='\n')
// we read the whole line
else
// the rest of the line was more than 2000 characters long. `c` contains a
// character from the input, and there's potentially more after that as well.
答案 1 :(得分:7)
scanf("%2000s %2000[^\n]", a, b);
答案 2 :(得分:4)
使用getchar和看起来像这样的一段时间
while(x = getchar())
{
if(x == '\n'||x == '\0')
do what you need when space or return is detected
else
mystring.append(x)
}
很抱歉,如果我写了一段伪代码,但我暂时不使用C语言。
答案 3 :(得分:2)
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void)
{
int i = 0;
char *a = (char *) malloc(sizeof(char) * 1024);
while (1) {
scanf("%c", &a[i]);
if (a[i] == '\n') {
break;
}
else {
i++;
}
}
a[i] = '\0';
i = 0;
printf("\n");
while (a[i] != '\0') {
printf("%c", a[i]);
i++;
}
free(a);
getch();
return 0;
}
答案 4 :(得分:2)
我来不及,但你也可以尝试这种方法。
#include <stdio.h>
#include <stdlib.h>
int main() {
int i=0, j=0, arr[100];
char temp;
while(scanf("%d%c", &arr[i], &temp)){
i++;
if(temp=='\n'){
break;
}
}
for(j=0; j<i; j++) {
printf("%d ", arr[j]);
}
return 0;
}
答案 5 :(得分:0)
听起来像是一个家庭作业问题。 scanf()是用于解决问题的错误函数。我推荐使用getchar()或getch()。
注意:我故意不解决问题,因为这看起来像是家庭作业,而只是指向正确的方向。
答案 6 :(得分:-1)
#include <stdio.h>
int main()
{
char a[5],b[10];
scanf("%2000s %2000[^\n]s",a,b);
printf("a=%s b=%s",a,b);
}
只需用s代替\ n:)
答案 7 :(得分:-2)
//如果需要,请增加char数组的大小。字符。
#include <stdio.h>
int main()
{
char s[10],s1[10];
scanf("\n");//imp for below statement to work
scanf("%[^\n]%c",s);//to take input till the you click enter
scanf("%s",s1);//to take input till a space
printf("%s",s);
printf("%s",s1);
return 0;
}