#include<stdio.h>
#include<stdlib.h>
int main(){
int n;
scanf("%d",&n);
char str[101];
for(int i=0;i<n;i++){
scanf("%s ",&str[i]);
}
printf("%s ",str);
}
我得到的输出没有空间例如,如果输入是(a p p l e(,我得到的是(苹果(,但我需要得到(a p l e
格式"%s"
用于读取一系列字符,直到遇到空白,
如果要使用循环,请使用转换说明符%c
,而不是转换说明符%s
。
例如
int i = 0;
while ( i < n && scanf( "%c", str + i ) == 1 && str[i] != 'n' ) ++i;
str[i] = ' ';
您可以使用标准函数fgets
来代替循环,例如
#include <stdio.h>
#include <string.h>
//...
fgets( str, n + 1, stdin );
str[ strcspn( str, "n" ) ] = ' ';
puts( str );
注意,由于此声明,表达式n + 1
不应大于101
char str[101];
在上一个printf
中,您只是在调用String,而不是放空格。
您需要另一个for
来逐个调用String,并在它们之间放置空格。
像这样:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n;
scanf("%d",&n);
char str[101];
for(int i=0;i<n;i++){
scanf("%s ",&str[i]);
}
for(int i=0;i<n;i++){
printf("%c ",str[i]);
}
}
如果您将scanf
更改为scanf(" %[^n]",&str[i]);
,您应该会得到所需的结果。%s
查找以空格分隔的字符串,而%[^n]
将把整个字符串带到换行符。