【问题标题】:Compiling dilemma(code blocks and ubuntu)编译困境(代码块和ubuntu)
【发布时间】:2016-04-10 04:56:32
【问题描述】:

我正在处理这个项目,经过一周的编码,我终于完成了它。我使用 Code::Blocks 创建了程序(编译它)(我只使用 Windows 7)。它运行完美。

但是,如果我将相同的c文件传输到virtualbox(ubuntu),当我编译它时,没有错误,但程序运行的方式不同。

在我的程序中有许多输入限制的功能。在我的虚拟盒子里,我似乎无法通过第一个限制。我还没有发现我是否无法通过下一个限制。

例如:

    while(1){
    printf("Enter the number of rows:");
    fgets(rows, 100, stdin);
    string_clean(rows); // '\n' to '\0'
    c=numstring_check(rows, strlen(rows));


    if(c==0){
        printf("INVALID!\n");
    }else if(c!=0){
        rows_i=strtol(rows, &remain, 10);
        if ((rows_i>10 || rows_i<1)){
            printf("INVALID!\n");
            continue;
        }else
            break;
    }
    }

numstring函数是:

int numstring_check (char array[], int size) {
int i,j,flag=0;
for (i=0; i<size; i++){
    j=isdigit(array[i]);
    if(j!=1){
        flag=1;
        break;
    }
}
if (flag==1)
    return 0;
}

这只是一个问题。我的困境是,我有多个通过这个函数运行的函数,这不是我唯一的输入检查器。

如果此代码块通过代码块运行,它可以正常工作,但在 ubuntu 上,它只会打印“无效”我编码的任何输入。我需要认真的帮助。

【问题讨论】:

  • 基本上,它检查输入字符串是否仅包含数字。之后,因为我确定它是数字,所以我使用 strtol 对其进行转换,并将其发送到另一个 if 语句以检查它是否在 1 到 10 之间,我将它存储在一个变量中。如果没有,它应该重新提示用户输入正确的值,直到读取到正确的输入。
  • isdigit 如果字符是数字字符,则返回非零值,否则为零。
  • numstring_check函数末尾添加return 1;
  • 为了便于我们人类阅读和理解,请一致缩进。 IE。在每个左大括号 '{' 后缩进。在每个右大括号 '}' 之前不缩进。切勿使用制表符进行缩进。建议为每个缩进级别使用 4 个空格,因为它足够宽,即使使用可变宽度字体也可以看到,并且允许整个页面有多个缩进级别

标签: c ubuntu compilation ubuntu-14.04 codeblocks


【解决方案1】:

函数:isdigit() 在参数为数字时返回 NON_ZERO。

这并不意味着它会返回1。建议使用:

if( !j ) 

作为您对非数字的测试。一个更好的计划是消除 j 以便对 isdigit()if() 的调用合并为:

if( !isdigit(array[i]) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2015-12-16
    • 2020-08-10
    相关资源
    最近更新 更多