这是一个C代码,用于获取方括号类型'(('&'的字符串<>'&'{}"&"[]'。这个字符串的长度是n,它是一个用户输入。
int main()
{
long int n;
int i;
scanf("%lld", &n);
char array[n];
for(i=0; i<n ; i++)
{
scanf("%s", &array[i]);
}
}
问题是我想从用户那里获得字符串,它们之间没有任何空格。但是,这段代码适用于每个字符之间有空格的输入,并给出正确的结果。
例如,如果我键入{(()
,程序将不会运行。但是如果我键入CCD_ 2,则程序显示正确的结果。我该如何解决这个问题?
更改:
scanf("%s", &array[i]);
到此:
scanf(" %c", &array[i]);
因为您尝试的是逐个字符地读取字符串。
请注意%c
之前的空格,它将占用输入n
时stdin缓冲区中留下的尾随换行符。
我在这里写过读一个带有scanf()
的字符时的注意事项。
现在,即使使用{(()
或{ ( ( )
作为输入,也将是相同的,因为scanf()
将忽略空白。
但是,如果您希望字符串被标准函数使用,那么您应该null终止字符串,这几乎是您肯定想要的。例如,如果要使用printf("%s", array);
,则必须终止array
null。
一种方法是,假设用户将正确输入(在完美的世界中(,您可以这样做:
#include <stdio.h>
int main()
{
long int n;
int i;
scanf("%ld", &n);
// create an extra cell to store the null terminating character
char array[n + 1];
// read the 'n' characters of the user
for(i=0; i<n ; i++)
{
scanf(" %c", &array[i]);
}
// null terminate the string
array[n] = ' ';
// now all standard functions can be used by your string
printf("%sn", array);
return 0;
}
PS:scanf("%lld", &n);
->scanf("%ld", &n);
。使用编译器的警告!它会告诉你的…
如果您想确保用户在每个"有效"字符之间至少键入1个空格字符,您可以在循环中等待,直到用户添加一个空格字符。
字符c;对于(i=0;i