scanf验证C

发布于 2024-11-06 14:15:31 字数 149 浏览 1 评论 0原文

这实际上会验证我的用户输入只有两个元素然后是换行符吗?

char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
  error();
}

will this actually verify my users input has only two elements then a newline?

char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
  error();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一个人练习一个人 2024-11-13 14:15:31

您必须检查 scanf() 的返回状态;如果它不返回 3,则验证失败。您的检查将确保有两个“单词”(前面可能有一些空格)。第二个单词后不允许有尾随空格。请注意,如果验证失败,您可能需要“吃掉”该行的其余部分 - 如果 newline 中有换行符,则不需要。

You must check the return status from scanf(); if it does not return 3, you failed the validation. Your checks will ensure that there are two 'words' (possibly preceded by some space). You won't be allowed trailing space after the second word. Note that you might need to 'eat' the rest of the line if the validation fails - you won't if you have a newline in newline.

∝单色的世界 2024-11-13 14:15:31

是的,那会起作用的。但前提是输入完全匹配:word word

如果用户输入与该格式不同的任何内容,例如,第二个单词和输入之间的空格,您的逻辑将失败。

char newline;
char out[50];
char in[50];
scanf("%s %s%c", out, in, &newline);
if(newline != '\n')
{
  printf("error!");
}

另外,不应该使用 scanf 来读取这样的输入。考虑使用 fgets 读取输入和 strtok 解析数据。

Yes, that will work. But only if the input matches exactly: word word<enter>.

If the user types anything different from that format, for instance, a space between the 2nd word and enter, your logic will fail.

char newline;
char out[50];
char in[50];
scanf("%s %s%c", out, in, &newline);
if(newline != '\n')
{
  printf("error!");
}

Also, scanf shouldn't be used to read from the input like that. Consider using fgets to read the input and strtok to parse the data.

硬不硬你别怂 2024-11-13 14:15:31

不!如果第二个字符串和换行符之间有一些空格字符,则 scanf 将无法正常工作。使用 getc() 来实现:

scanf("%s%s", buf1, buf2);
char newline = 0;
while((newline = getc()) == ' '  || newline == '\t');
if(newline != '\n'){
  error();
}

编辑:

添加尾随空格的大小写。

No! scanf will work incorrect if there are some whitespace character between second string and newline. use getc() for that:

scanf("%s%s", buf1, buf2);
char newline = 0;
while((newline = getc()) == ' '  || newline == '\t');
if(newline != '\n'){
  error();
}

Edit:

Adding case for trailing whitespaces.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文