c-如何使用scanf从用户那里获得没有空格的字符串



这是一个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);,则必须终止arraynull。

一种方法是,假设用户将正确输入(在完美的世界中(,您可以这样做:

#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

相关内容

  • 没有找到相关文章

最新更新