这个是什么问题,这个异常,就是我要求硬盘写操作,获取时间,这个是为什么报错

img


这个是什么问题,这个异常,就是我要求硬盘写操作,获取时间,这个是为什么报错

这是编译问题,代码里有错误,sum没有定义 exe_time 也没有定义
具体要看你的代码


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <windows.h>

double clockperiods = 0;//写的文件的时钟周期数差之和,初始化为零
char str[1024];//1kb大小的字符串
//写文件方法 filename :文件名 ; size 文件大小 (kb)
void save(char filename[],int size)
{
    LARGE_INTEGER start_t, stop_t;
    QueryPerformanceCounter(&start_t);
    FILE * fp;//文件指针
    if((fp=fopen(filename,"w"))==NULL) //写文件形式打开文件
    {
        printf("无法打开文件\n");//如果打开出错,就输出“无法打开文件”的信息
        exit(0);//终止程序
    }
    for(int i =0; i<size; i++) //循序写size1次kb大小的数据
    {
        fputs(str,fp);
    }
    fclose(fp);//关闭输出文件
    QueryPerformanceCounter(&stop_t);
    clockperiods+=(stop_t.QuadPart-start_t.QuadPart);//累加每一次读取的文件的时钟周期数差
}
/*总计一个G储存,分多个小文件写入储存*/
int main()
{
    int length = sizeof(str)/sizeof(char);//str数组的长度
    length--;//长度减一,使字符数组最后一个是结束符
    for(int i = 0; i<length; i++)
    {
        str[i]='a';
    }
    int filenums,filesize ; //要生成文件的数量,大小单位为kb
    printf("请输入文件大小,\n");
    scanf("%d",&filesize);
    filenums = 1024*1024/filesize;
    char chars[13];//储存文件后面大小的名字 (sizekb.txt)
    itoa(filesize,chars,10);
    //char *itoa( int value, char *string,int radix); [1]原型说明: value:欲转换的数据。
    //string:目标字符串的地址。 radix:转换后的进制数,可以是10进制、16进制等。
    char filesuffixname[20]="sizeis";//文件后面的名字
    strcat(chars,"kb.txt");//字符串拼接函数
    strcat(filesuffixname,chars);
    //写filenums个文件
    printf("%d个%dkb文件开始写!\n",filenums,filesize);
    for(int i =0 ; i<filenums; i++) ////循环写入filenums次文件
    {
        char chars1[20];//文件后半部分的名字
        itoa(i,chars1,10);
        char filename[100] = "C:\\coasep\\coasepv1\\coasep\\c5disk\\";//修改为本机目录
        strcat(filename,chars1);//字符串拼接函数
        strcat(filename,filesuffixname);
        save(filename,filesize);//调用写文件方法
    }
    printf("%d个%dkb文件生成成功!\n",filenums,filesize);

    LARGE_INTEGER freq;
    QueryPerformanceFrequency(&freq);
    double exe_time;//写文件时间
    exe_time = 1e3*(clockperiods)/freq.QuadPart;
    //全部文件大小 ;全部文件计算公式:文件数 * 单个文件大小 / 1024 因为这里单位是MB 文件大小单位为kb 1MB=1024kb
    double filesizes=filenums/1024.0*filesize;
    //写文件数度 ;计算公式 全部文件大小 / 写文件用时 * 1000 因为数度以MB/S为单位 写文件用时单位为ms 1s=1000ms
    double v = filesizes/exe_time*1000;
    printf( "%d个文件写成功\t共计:%fMB\t写用时:%fms.\n",filenums,filesizes,exe_time);
    printf("写文件数度:%.2fMB/s",v);
    return 0;
}

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7600193
  • 这篇博客也不错, 你可以看下输入两个整数,求;两者的和,差,积,商,余数。
  • 除此之外, 这篇博客: 封装一个函数,利用冒泡排序实现,实现对整形数组的升序排序中的 封装一个函数,利用冒泡排序实现,实现对整形数组的升序排序。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<iostream>
    using namespace std;
    void print_arr(int* arr, int len);
    void mp(int* arr, int len);
    
    /*冒泡排序函数*/
    void mp(int * arr,int len)
    {
    	for (int i = 0; i < len - 1; i++)
    	{
    		for (int j = 0; j < len - 1 - i; j++)
    		{
    			/*如果j>j+1的值,交换数据*/
    			if (arr[j] > arr[j + 1])
    			{
    				int temp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = temp;
    			}
    		}
    	}
    }
    
    /*输出函数*/
    void print_arr(int* arr, int len)
    {
    	for (int i = 0; i < len; i++)
    	{
    		cout << arr[i] << endl;
    	}
    }
    
    int main()
    {
    	/* 1.创建一个数组 */
    	int arr[11] = { 1,8,5,60,9,11,13,84,16,89,10};
    	int len = sizeof(arr) / sizeof(arr[0]);
    	/* 1.创建一个函数,实现冒泡排序 */
    	mp(arr, len);
    	/* 1.打印排序后的数组 */
    	print_arr(arr, len);
    	return 0;
    }