gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:22 26 4
gpt4 key购买 nike

这是一个 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]);
}
}

问题是我想从用户那里得到字符串之间没有任何空格。但是,这段代码适用于每个字符之间有空格的输入,并给出正确的结果。

例如,如果我键入 {((),程序将不会运行。但如果我键入 { ( ( ),程序会显示正确的结果。我该如何解决这个问题?

最佳答案

改变:

scanf("%s", &array[i]);

为此:

scanf(" %c", &array[i]);

因为您尝试做的是逐个字符地读取您的字符串。

请注意 %c 之前的空格,它会占用您输入 n 时留在标准输入缓冲区中的尾随换行符。

我曾写过关于使用 scanf() 读取字符时的注意事项 here .

现在,即使您使用 {((){ ( ( ) 作为输入,它也是一样的,因为 scanf() 将忽略空格。

但是,如果您希望它被标准函数使用,您应该null 终止您的字符串,这几乎肯定是您想要的。例如,如果您要使用 printf("%s", array);,那么您必须以 array 为空终止。

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

#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] = '\0';

// now all standard functions can be used by your string
printf("%s\n", array);

return 0;
}

PS: scanf("%ld", &n); --> scanf("%ld", &n);。使用编译器的警告!它会告诉你这件事..

关于c - 如何使用 scanf 从用户那里获取没有空格的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53134701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com