C语言菜鸟问题:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言菜鸟问题:相关的知识,希望对你有一定的参考价值。

while(num/a==0)
/*已定义a=10000*/
a/=10;
switch(a)

case 10000:bit=5;break;
case 1000:bit=4;break;
case 100:bit=3;break;
case 10:bit=2;break;
case 1:bit=1;break;

printf("\The bit(s) of the num is %d\n",bit);我想写输出一个数(num)是几位数的程序(最高5位),但无论我输入什么数,输出都是5位……请问上面哪些地方错了?
各位,我已经知道原因了,我用long初始num,当我没给num初始一个数(如0)时便会出现如述问题,但初始了就没问题……只是初始了后就算num输入为负数或6位数都不会报错而已……

没有问题啊,我运行了下,是正常的啊,这是我的代码:
main()

int a = 10000, bit = 0;
int num;
printf( "please input num: \\n" );
scanf( "%d", &num );

while(num/a==0)
a/=10;
switch(a)

case 10000:bit=5;break;
case 1000:bit=4;break;
case 100:bit=3;break;
case 10:bit=2;break;
case 1:bit=1;break;

printf("\\The bit(s) of the num is %d\\n",bit);

system("pause");
return 0;
参考技术A #include<stdio.h>
void main()

int a=10000;
int bit,num;
scanf("%d",&num);
while(num/a==0)
a/=10;
switch(a)

case 10000:bit=5;break;
case 1000:bit=4;break;
case 100:bit=3;break;
case 10:bit=2;break;
case 1:bit=1;break;

printf("\The bit(s) of the num is %d\n",bit);

可以通过,我调试了的,你参考参考
参考技术B 你的程序是没有问题的,我编译了
#include<stdio.h>
main()
int a=10000,num,bit;
scanf("%d",&num);
while(num/a==0)
/*已定义a=10000*/
a/=10;
switch(a)

case 10000:bit=5;break;
case 1000:bit=4;break;
case 100:bit=3;break;
case 10:bit=2;break;
case 1:bit=1;break;


printf("\The bit(s) of the num is %d\n",bit);
参考技术C 应该是while(num%a==0) 才对吧。 参考技术D 对的……sorry~

c语言socket通信问题,小弟菜鸟,求大神指导下,谢谢

SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);

if(CreateSocketToServer(sockClient))//已正确创建套接字

if(ConnectToServer(sockClient,flag))//已正确连到服务器

CString sendInfo,recvInfo;
sendInfo="Hello,Sever "+name+" "+passwd+"\n
if(SendInfoToServer(sockClient,sendInfo,flag))//已向服务器发送验证数据

cout<<"向服务器发送用户名和密码:"<<sendInfo<<endl;
recvInfo=RecvInfoFromServer(sockClient,flag);
MessageBox("接收到信息为:"+recvInfo);
if(recvInfo!="false")//得到服务器确认信息

cout<<"客户端接收到服务器响应:"<<recvInfo<<endl;
while(连接服务器成功)

/*我想在得到服务器的确认消息后,新建一个线程与服务端进行通信,但是while的判断
*语句条件是该socket连接仍然存在,但是我百度了下,都说socket不能使用两次connect,
* 那我这里应该怎么判断呢,谢谢各位...
*/




CloseSocketToServer(sockClient);

你可以在while()判断socket句柄是否有效,如果有效,然后,你再创建一个新的线程,线程里重新创建一个socket句柄,重新连接,然后通信。但是我觉得没有必要,你直接while判断句柄有效,然后直接用该句柄进行通信不好么。追问

恩,我明白你的意思了,我还有个问题,就是当程序运行过connect后,继续运行send操作后,这时我断开服务端后,应该是服务断开了呀,应该是接不到什么了,为什么客户端还会接受到一个空消息呢

追答

这是windows socket机制的问题,在windows下是返回一个空消息,在linux下是返回-1 但是在arm下,如果你断开了,但你没有判断就直接recv,那就会提示你段错误了

追问

非常感谢你的热心,还有个问题想问下哈,我将开始创建的socketClient传递到新建的线程中,在线程中新建了一个自己写的socket类的对象,使用该对象的SendInfoToServer(sockClient,sendInfo,flag)与服务器进行通信,想着同一个socketClient,为什么程序会报错socket error 10038即没有建立socket,这是怎么回事呢

追答

你是怎么传进去的,可能是你的传递方式有问题

追问

百度这里字数有限制,我给你发了百度的私信了,呵呵,帮我看下,实在是麻烦你了。。。。

追答

回你了

追问

谢谢你,哈哈,问题解决了,谢谢,学长....,同时谢谢以下各位的回答,真心感谢....

参考技术A 我不明白你为什么要用while。。。用if就可以了啊。。把SOCEKET的套接字传到线程里面,继续用这个套接字做通信接口,完成你的业务逻辑。追问

恩,我刚把它改成if了,,我还有个问题,就是当程序运行过connect后,继续运行send操作后,这时我断开服务端后,应该是服务断开了呀,应该是接不到什么了,为什么客户端还会接受到一个空消息呢

追答

空消息?你是说你发送了密码以后收到一个空消息?还是你发送全部完成以后closesocket以后收到一个空消息?

追问

感谢你哦,呵呵》。。。

参考技术B 把while也挪到新线程中去。

以上是关于C语言菜鸟问题:的主要内容,如果未能解决你的问题,请参考以下文章

c语言单链表问题,请问这个那里错了,本人菜鸟,下面是程序

菜鸟学C语言 3.0.1

菜鸟提问 c语言关于快速排序

菜鸟再次求救!C语言3个数小到大排,为何3个if就行?if里面的赋值为啥要这样,求解释,谢了

C语言教程,从菜鸟到高手!

c语言socket通信问题,小弟菜鸟,求大神指导下,谢谢