所以在这个数据库中我需要有一些限制,比如Name only letters等等。
但是如果我使用scanf(例如“%s,c.name”),它只会读到第一个空格,所以如果 我不得不添加像Marie Claire这样的2个名字,我不能使用scanf。
我有一个检查字符串是否包含数字的方法(将提供它),但我想知道是否可以让fgets()只接受字母。我会提供我尝试的内容,但是当我使用这种方法时,它不接受任何输入只是跳过它。
printf ("\nPlease enter Name:\n");
while (fgets (c.name, sizeof (c.name), stdin) && cCheck(c.name,100) == FALSE);
{
}
检查数字的方法[boolean是用我这边的typedef制作的]
boolean cCheck(char *test, int max)
{
int x;
for (x =0; x<max; x++)
{
if (isdigit(test[x]))
{
return FALSE;
}
if (x==max)
{
return TRUE;
}
x++;
}
return TRUE;
}
答案 0 :(得分:4)
与下面的代码示例一样,如果指定要读取的可接受字符的格式说明符,则可以指定fscanf只读取字符以及.
和' '
(空格)。如果你在前面放^
[^a-zA-Z. ]
,那么除了这些字符外,它会读取所有内容。
#include <stdio.h>
int main()
{
char s[25];
printf("enter a string: ");
scanf("%25[a-zA-Z. ]c\n", s); // reads upto 25 chars of a-z/A-Z and '.', ' '.
printf("s1: %s\n", s);
return 0;
}
以上代码的示例输出:
c:\my-src\test-programs>scanf-test.exe
enter a string: dasdasd asdasda 34534536
s1: dasdasd asdasda
c:\my-src\test-programs>scanf-test.exe
enter a string: werfdsfsd3423524525
s1: werfdsfsd
有关详细信息,请参阅以下链接:
答案 1 :(得分:1)
但是如果我使用scanf(例如“%s,c.name”),它只读取直到 到第一个空间,所以如果我不得不添加像Marie Claire这样的2个名字,我 不能使用scanf。
你可以写
scanf( "%s %s", c.name, c.surname ); // better with s_scanf
我有一个检查字符串是否包含数字或方法的方法 不(会提供)但我想知道我是否可以制作fgets() 只接受信件。
不,fgets
读取包括\n
在内的字符,您无能为力。而是通过将字符读入缓冲区并提取名称来利用它,例如使用sscanf()
甚至strtok()
再次建议使用_s版本的函数来避免令人讨厌的意外。
答案 2 :(得分:0)
总之没有。但是将输入和检查分开几乎总是更好 - 所以使用fgets读取文本,然后用isalpha
或类似的东西检查它。
答案 3 :(得分:0)
您是否尝试从字符串中删除'\n'
。
#include <ctype.h>
#include <stdio.h>
char buf[SIZE];
int good;
do {
size_t i;
char *pend;
good = 1;
fgets(buf, sizeof buf, stdin);
pend = strchr(buf, '\n');
if (pend != NULL)
*pend = '\0';
else
flush_stdin();
for (i = 0; buf[i] != '\0' && good; i++)
if (!isdigit(buf[i])
good = 0;
} while (good != 1);
答案 4 :(得分:0)
我如何解决它:
// ----- Name Input ----- //
printf ("\nPlease enter Name:\n");
char nameCheck[50];
fgets (nameCheck,sizeof (nameCheck),stdin);
while (cCheck(nameCheck,50) == FALSE)
{
fgets(nameCheck,sizeof (nameCheck),stdin);
}
strcpy (c.name, nameCheck);
我添加了新的char nameCheck[50];
点了fgets()
使用while
做了nameCheck
,然后做了strcpy
:)