这将实际验证我的用户输入只有两个元素,然后换行吗?scanf验证C
char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
error();
}
这将实际验证我的用户输入只有两个元素,然后换行吗?scanf验证C
char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
error();
}
您必须从scanf()
检查退货状态;如果它不返回3,那么验证失败。您的支票将确保有两个'单词'(可能在前面有一些空格)。在第二个单词之后,你将不会被允许放置空格。请注意,如果验证失败,则可能需要“吃”余下的行 - 如果在newline
中有换行符,则不会。
不!如果第二个字符串和换行符之间有一些空格字符,则scanf
将不正确。使用getc()
为:
scanf("%s%s", buf1, buf2);
char newline = 0;
while((newline = getc()) == ' ' || newline == '\t');
if(newline != '\n'){
error();
}
编辑:
添加案例尾部空格。
你测试过了吗? – karlphillip 2011-05-12 15:39:29
小心点。 'out'和'in'需要有足够的空间容纳用户输入的内容。你应该使用'%ns',其中'n'是'out'或''''-1'指向的缓冲区的大小。所以,如果你的缓冲区长度是12个字节,那么'%11s'。 – nmichaels 2011-05-12 15:39:41
我在[20] char out [20]中有char,并且谢谢,“%20s%20x” – Jono 2011-05-12 15:42:02