因此,我开始这个程序,学习的新阶段,我需要学习如何只允许用户输入一定数量的字符,当我提示他们输入。例如:
char firstname[20];
printf("What is your first name?");
scanf("%s", &firstname);我只希望用户能够键入和输入20个字符。我将如何做到这一点,当提示用户只输入数字时,情况会是相同的吗?
发布于 2016-01-26 20:36:01
我只希望用户能够键入并输入20个字符
那么,您只能指示用户,并期望他们遵循。除了n字符之外,没有什么可以阻止用户输入更多的字符,但是,在编程上,您只能将扫描限制为n字符,使用
char firstname[20];
printf("What is your first name?");
scanf("%19s", firstname); //& not needed留出空终止符的空间。
如果名称包含空格,则带有%s的scanf()将无法处理输入。在这种情况下,您可能需要使用fgets(),它可以处理输入字符串中空白的存在。
尽管如此,
scanf()的返回值,以确保扫描成功。发布于 2016-01-26 20:36:58
考虑使用fgets:
char *fgets(char *str, int n, FILE *stream)据man说:
fgets()最多读取一个大小小于相同大小的字符,并将它们存储到s所指向的缓冲区中。读取在EOF或换行符之后停止。如果读取换行符,则将其存储到缓冲区中。终止空字节('\0')存储在缓冲区中的最后一个字符之后。
样本片段:
fgets(firstname,20,stdin);记住从字符串中移除尾随的换行符('\n')。你可以用strcspn做这件事
#include <string.h>此外,如果您的尝试是让用户能够输入最多20个字符,您应该声明您的数组中多一个位置,因为空终止字符'\0‘。所以应该是
char firstname [21];请注意,fget()将防止缓冲区溢出,但不会处理额外的字符,实际上它们留在stdin中。这可能是个问题。不过,我发现这个职位很有用,我将引用布鲁皮克斯发布的解决方案:
fgets(answer2,sizeof(answer2),stdin);
> if(!strchr(answer, 'n')) //newline does not exist while(fgetc(stdin)!='n');//discard until newline fgets(answer2,sizeof(answer2),stdin);发布于 2016-01-26 20:52:59
这里有两个非常不同的问题:
大多数答案都集中在#1上,而且它们都很好。
对于#2,您的程序必须读取多余的字符并丢弃它们。例如,你可以成堆地读,直到你读到最后一行为止。如果不这样做,那么在下一个提示符之后,额外的字符将在输入缓冲区中结束,您的程序和用户将失去同步。
https://stackoverflow.com/questions/35023416
复制相似问题