名称不会出现在我的程序的底部

时间:2015-09-06 05:55:09

标签: c++

这个程序用于我的作业,但程序的底部没有显示输入的名称为什么? 你们可以在Dev ++中测试它,看它是如何工作的。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /billing/services/student?id=$1 [QSA,NC,L]

此部分应显示用户的名称和净收入,但不显示名称

3 个答案:

答案 0 :(得分:3)

它不起作用,因为scanf想要一个char *而你传递的是char (*)[100]。要解决此问题,请记住数组是一个连续的内存块,并且数组的名称是指向该内存开头的指针。因此,n4m3已经是char *,并且无需使用&获取地址。

该行应为scanf(" %s",n4m3); //no '&'

相关说明

我通过编译启用了警告的代码找到了这个。你应该总是这样做!在具有clang标志-Wall -Wextra -pedantic的Linux或Mac上进行编译会对此代码产生多个警告。相关的是:

tmp.cpp:9:13: error: format specifies type 'char *' but the argument has type
  'char (*)[100]' [-Werror,-Wformat]
scanf(" %s",&n4m3);
        ~~  ^~~~~

谷歌搜索错误带来了我here,这解决了问题。另一个警告是:

tmp.cpp:51:10: error: variable 'T' is used uninitialized whenever 'if' condition
      is false [-Werror,-Wsometimes-uninitialized]
else if (gI>=1000)
         ^~~~~~~~
tmp.cpp:54:24: note: uninitialized use occurs here
    printf("\n Tax:%d",T);
                       ^
tmp.cpp:51:6: note: remove the 'if' if its condition is always true
else if (gI>=1000)
     ^~~~~~~~~~~~~
tmp.cpp:5:15: note: initialize the variable 'T' to silence this warning
int rt,hr,gI,T,td,ss=100,pi=100,hc=100,NetIn;
              ^
               = 0

还有更多警告,我会让你的编译器(一旦你正确设置)找到。在Windows上,使用warning levels增加Visual Studio的these instructions。如果让编译器为您分析代码,您将节省许多小时的工作。

答案 1 :(得分:-1)

当你输入一个没有空格的字符串时,它会正常工作。 但是如果你打算输入一个带空格的字符串,它的行为就会改变,因为它只会读取字符串直到空格。

为此,您可以在代码中使用getline或fgets或sscanf而不是scanf .i.e

尝试替换该行:

scanf(" %s",&n4m3);

fgets(n4m3,100,stdin);

它应该可以肯定。

答案 2 :(得分:-2)

按预期工作。只是在程序结束后关闭结果的命令行窗口,所以你看不到它。