这个程序用于我的作业,但程序的底部没有显示输入的名称为什么? 你们可以在Dev ++中测试它,看它是如何工作的。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /billing/services/student?id=$1 [QSA,NC,L]
此部分应显示用户的名称和净收入,但不显示名称
答案 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)
按预期工作。只是在程序结束后关闭结果的命令行窗口,所以你看不到它。