c语言gets_s()不起作用

Coordinate35 2014-11-25 11:55:13
写了个程序来算电阻的电流和电压值得,但是在input.cpp文件中14行的gets_s(data);不能正常的工作(没有让我输入的机会),单步执行的时候一进去就出来了,想请教一下各位大神,看看这是怎么一回事,谢谢!
main.cpp中

#include <stdlib.h>
#include <stdio.h>
#include "def.h"

int main()
{
int number;
int *number_pointer;
double e, voltage[100], current[100], resistance[100];
double *e_pointer, *voltage_pointer, *current_pointer, *resistance_pointer;
number = 0;
number_pointer = &number;
resistance_pointer = &resistance[1];
e_pointer = &e;
input(e_pointer, resistance_pointer, number_pointer);
voltage_pointer = &voltage[*number_pointer];
current_pointer = ¤t[*number_pointer];
resistance_pointer = &resistance[*number_pointer];
calculate(e_pointer, resistance_pointer, voltage_pointer, current_pointer, number_pointer);
current_pointer = current;
voltage_pointer = voltage;
output(current_pointer, voltage_pointer, number_pointer);
return 0;
}

input.cpp中:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void input(double *e_pointer, double *resistance_pointer, int *number)
{
int i, j, data_length;
char data[100];
char resist_string[100];
char *origin_pointer, *copy_pointer;
printf("请输入电动势大小:");
scanf_s("%lf", e_pointer);
putchar('\n');
printf("请输入电阻:");
gets_s(data);
putchar('\n');
data_length = strlen(data);
for (i = 0; i <= data_length; i++)
{
for (j = 0; j <= 99; j++)
{
resist_string[j] = '\0';
}
j = i;
while ((' ' != data[j]) && ('\0' != data[j]))
{
j++;
}
origin_pointer = &data[i];
copy_pointer = resist_string;
while (i < j)
{
*copy_pointer = *origin_pointer;
copy_pointer++;
origin_pointer++;
j--;
}
*resistance_pointer = atof(resist_string);
if (0 >= *resistance_pointer)
{
printf("无效的电阻输入值");
exit(0);
}
resistance_pointer++;
*number++;
i = j + 1;
}
if (1 == *number % 2)
{
printf("电阻的数量不能为奇数");
exit(0);
}
}

calculate.cpp中

void calculate(double *elec_force, double *resistance_pointer, double *voltage_pointer, double *current_pointer, int *number)
{
int i;
double rate;
double *vice_voltage_pointer, *vice_current_pointer;
vice_voltage_pointer = voltage_pointer;
vice_current_pointer = current_pointer;
*vice_current_pointer = 1.0;
*vice_voltage_pointer = (*vice_current_pointer) / (*resistance_pointer);
*(vice_current_pointer - 1) = 1.0;
*(vice_voltage_pointer - 1) = (*(vice_current_pointer - 1)) * (*(resistance_pointer - 1));
vice_current_pointer -= 2;
vice_voltage_pointer -= 2;
resistance_pointer -= 2;
for (i = *number - 2; i >= 1; i--)
{
*vice_voltage_pointer = *(vice_voltage_pointer + 1) + *(vice_voltage_pointer + 2);
*vice_current_pointer = *vice_voltage_pointer / *resistance_pointer;
*(vice_current_pointer + 1) = *vice_current_pointer;
*(vice_voltage_pointer + 1) = (*(vice_current_pointer + 1)) * (*(resistance_pointer + 1));
vice_current_pointer -= 2;
vice_voltage_pointer -= 2;
resistance_pointer -= 2;
}
rate = *elec_force / (*(vice_voltage_pointer + 1) + *(vice_current_pointer + 2));
for (i = 1; i <= *number; i++)
{
*voltage_pointer *= rate;
*current_pointer *= rate;
voltage_pointer--;
current_pointer--;
}
}



output.cpp中

#include <stdio.h>
void output(double *current_pointer, double *voltage_pointer, int *number)
{
int i;
for (i = 1; i <= *number; i++)
{
printf("%lf %lf\n", *current_pointer, *voltage_pointer);
current_pointer++;
voltage_pointer++;
}
}


dev.h中

void output(double *current_pointer, double *voltage_pointer, int *number);
void calculate(double *elec_force, double *resistance_pointer, double *voltage_pointer, double *current_pointer, int *number);
void input(double *e_pointer, double *resistance_pointer, int *number);


...全文
565 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵狗 2014-11-26
  • 打赏
  • 举报
回复
gets_s需要两个参数,后一个限定字符的个数,例如gets_s(data, 80)
百曉生 2014-11-26
  • 打赏
  • 举报
回复
不管用就很有可能是缓冲区的问题,在它之前加个getchar()试试
xionggch 2014-11-26
  • 打赏
  • 举报
回复
scanf_s("%lf", e_pointer); 后面加上清空输入缓冲区

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧