2015-10-07 60 views
-1

因此,我进入大学几个星期,现在我与C有爱/恨关系。我喜欢这门语言,但是它的某些部分让我兴奋不已。如何在不使用stdlib.h的情况下验证C语言中的输入?

目前,我需要进行一个练习,其中从命令行获取两个参数,然后检查它们是否为字母或零(无论是哪种情况,“无效输入”和'无效输入 - 除以零不允许')

但是,对于这个特定练习,我们的标记系统会拒绝任何包含stdlib的程序,这意味着使用类似atoi或atof的东西不是选项。我的教授提到了一些关于使用scanf将参数先解析为字符串然后将其转换为整数的说法,但老实说,现在这已经超出我了。

+5

欢迎使用堆栈溢出!现在你的问题出现了,只是要求你的作业问题的答案,这不是Stack Overflow的问题。我会建议先做一些自己的研究(有无尽的信息来源)并试图弄清楚。如果遇到可能会产生[良好问题]的特定问题(http://stackoverflow.com/help/how-to-ask),请随时再次询问。 – jaredk

+0

哦,别担心,这不是我诉诸的第一件事。我花了好几个小时试图通过纯粹的意志来找出问题,然后我转向我的课程书籍和我的教授,没有人特别有帮助。 – Absoguar

回答

0

使用sscanf()。
你的主要应该看起来像那样。

int main(int argc, char *argv[]) 
{ 
    int numCount, x, y; 
    numCount = sscanf(argv[1], "%d", &x) + sscanf(argv[2], "%d", &y); 

    if(numCount != 2){ 
     printf("[-] One of the arguments is not a valid number.\n"); 
     return 0;} 

    if(x == 0 || y == 0){ 
     printf("[-] one of the numbers is zero.\n"); 
     return 0;} 

    printf("[+] The arguments are valid numbers.\n"); 
} 

sscanf以您选择的格式扫描缓冲区。在这种情况下,你有两个参数,这意味着你有两个缓冲区。您希望每个缓冲区的格式是“%d”,因为您希望每个缓冲区都是一个数字。 sscanf返回完成的成功“读取”数量。如果缓冲区不包含有效数字,则每个sscanf的返回值将为0,因此我们期望numCount为2.

+0

在学生有机会从他们身上学到东西之前,请不要给出完整的家庭作业问题答案。 – Davislor

+0

个人,我喜欢从代码片段学习。无论如何,从现在开始,我会避免给出作业答案。 – hyprnir

+0

不要担心Lorehead我不只是打算复制这个。其实我试图在这里理解代码并重写它。现在唯一的问题是,试图将其中一个数字除以另一个数字会引发一个未处理的异常,这对我来说并不合适。 – Absoguar

0

如果你的教授允许使用sscanf(3)<stdio.h>的其他功能,你只需要阅读他们的文档并使用它们。但我想那个练习他不想要那个。

然后,您需要重新实施自己的等效atoi,但将其称为my_atoi以避免混淆。这不是什么大不了的事。你可以考虑实现一种strtol(3)来代替管理结束指针。

顺便说一句,你甚至可以找到一些C standard library一些free software实现(例如musl-libc ....),并研究他们的源代码,但你的老师可能会认为这是欺骗,如果你不告诉他。

但是,在解决了特定练习之后,我建议您阅读一些免费的软件代码(并且不要犹豫地告诉您的老师),因为它作为一个软件开发人员非常具有启发性并且更接近您的实际工作生活后来(在你的第一份工作中,你很可能不会开始一个软件项目)。

相关问题