Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Forenman

Member
  • Content Count

    20
  • Joined

  • Last visited

Awards


This user doesn't have any awards

About Forenman

  • Title
    Newbie

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I want the main function to call the error callback with the error code then display it
  2. #include<stdio.h> #include<malloc.h> void SError(int); void WriteFile(void(*functionPtr)(int));/* Parameter is function pointer */ int BinaryWriteToFile(void); void main(void) { void(*functionPtr)(int); functionPtr = SError; WriteFile(functionPtr); } void SError(int errorNum) { static char*err[] = { "Cannot Open File\n", "Read Error\n", "Write Error\n"}; puts(err[errorNum]); } void WriteFile(void(*errorFunction) (int)) { int error = BinaryWriteToFile(); if(error)errorFunction(error); } int BinaryWriteToFile(void) { int errorCode = 2;// Fictitiousdisk occurred, report for logging to file via SError... return errorCode; } I want to be able to modify the call-back example,by inserting pointer parameter into the arguments lists of the function calls as required,to return the error-message test to main(). Display the error-message text on-screen in main()before terminating the program. But i am really struggling with where to start etc. Can someone point anything out to me?
  3. any hint on the other mistakes XD
  4. #include <stdio.h> struct examResults { char title[20]; unsigned int score[20]; }; myExam; int main() { strcpy(myExam.title, "ClassA"); myExam.score[1] = 20; myExam.score[17] = 69; struct examresults newexamresults[15]; strcpy(newexamresults[5].title, "ClassB"); strcpy(newexamresults[7].title, "ClassC"); newexamresults[6].score[9] = 5; newexamresults[6].score[18] = 10; newexamresults[12].score[9] = 50; newexamresults[12].score[18] = 100; printf("%s\n", myExam.title); printf("%d\n", myExam.score[1]); printf("%d\n\n", myExam.score[17]); printf("%s\n", newexamresults[5].title); printf("%d\n", newexamresults[6].score[9]); printf("%d\n\n", newexamresults[6].score[18]); printf("%s\n", newexamresults[7].title); printf("%d\n", newexamresults[12].score[9]); printf("%d\n", newexamresults[12].score[18]); } I keep getting incomplete type error for "newexamresults", does anyone have any idea how to rectify this?
  5. Hi guys just checking if i have this done correctly, or if their is something i need to change before continuing #include <stdio.h> void main(void) { struct examResults { char title[20]; unsigned int score[20]; const int myExam[17]; myExam[0] = 62; myExam[17] = 80; }; }
  6. I change that their and im still getting the same error
  7. #include <stdio.h> void main(void) { double y; double x, a, b, c, result; printf("Enter value for y: \n"); scanf_s("%lf", &y); getchar(); { switch (y) { case (y > 0 & y <= 10): printf("y is equal or greater than 0 and smaller than 10"); break; case (y >= 11 & y <=20 ): printf("y is equal or greater than 11 and smaller than 20"); break; case (y >= 21 & y <= 30): printf("y is equal or greater than 21 and smaller than 30"); break; case (y >= 31 & y <= 40): printf("y is equal or greater than 31 and smaller than 40"); break; case (y >= 41 & y <= 50): printf("y is equal or greater than 41 and smaller than 50"); break; case (y >= 51 & y <= 60): printf("y is equal or greater than 51 and smaller than 60"); break; default: printf("Invalid number\n"); } } printf("\n Enter value for X:"); //Gets vlaue for x scanf_s("%lf", &x); //Reads in value for x getchar(); //Waits for input printf("Enter value for A:"); scanf_s("%lf", &a); getchar(); printf("Enter value for B:"); scanf_s("%lf", &b); getchar(); printf("Enter value for C:"); scanf_s("%lf", &c); getchar(); result = (a * pow(x, 2)) + (b * x) + c; } The code keeps throwing an error in visual studio "Expression must have a constant value". Any ideas how to rectify this?
  8. Hi im having trouble getting my case function to work. I enter a number between 0-60 and it is meant to return a @your number is greater than x but less than y. It has to be done with switch statemtents but i dont know how to make this function. I am incrementing my for loop and trying to get it to work that way. Any ideas? #include <stdio.h> void main(void) { int y; double x, a, b, c, result; printf("Enter value for y: \n"); scanf_s("%lf", &y); getchar(); int counter; int min; int max; for (counter = 0; counter < 6; counter++) { // Incraments if statments up to 60 min = counter * 10; // Multiplys counter by 10 max = (counter + 1) * 10; // Allows counter up to 60 if (y >= min && y < max) // If statement for if its between 0<60 { switch (y) { case 'A': printf("y is equal or greater than %d and smaller than %d", min, max); break; case 'B': printf("y is equal or greater than %d and smaller than %d", min, max); break; case 'C': printf("y is equal or greater than %d and smaller than %d", min, max); break; case 'D': printf("y is equal or greater than %d and smaller than %d", min, max); break; case 'F': printf("y is equal or greater than %d and smaller than %d", min, max); break; default: printf("Invalid number\n"); } } } printf("\n Enter value for X:"); //Gets vlaue for x scanf_s("%lf", &x); //Reads in value for x getchar(); //Waits for input printf("Enter value for A:"); scanf_s("%lf", &a); getchar(); printf("Enter value for B:"); scanf_s("%lf", &b); getchar(); printf("Enter value for C:"); scanf_s("%lf", &c); getchar(); result = (a * pow(x, 2)) + (b * x) + c; }
  9. #include <stdio.h> void main(void) { int y; double x, a, b, c, result; printf("Enter value for y: \n"); scanf_s("%lf", &y); getchar(); if (y < 60 & y > 51) { printf(" y is less than 10"); } else if (y <= 50 & y > 41) { printf(" y is greater than 10 but less than 20"); } else if (y < 40 & y>31) { printf(" y is greater than 10 but less than 20"); } else if (y < 30 & y>21) { printf(" y is greater than 10 but less than 20"); } else if (y < 20 & y>11) { printf(" y is greater than 10 but less than 20"); } else if (y < 10 & y> 0) { printf(" y is greater than 10 but less than 20"); } printf("\n Enter value for X:"); //Gets vlaue for x scanf_s("%lf", &x); //Reads in value for x getchar(); //Waits for input printf("Enter value for A:"); scanf_s("%lf", &a); getchar(); printf("Enter value for B:"); scanf_s("%lf", &b); getchar(); printf("Enter value for C:"); scanf_s("%lf", &c); getchar(); result = (a * pow(x, 2)) + (b * x) + c; return(result); } I cant seem to get any of my if statements to print no matter what value I use. I am also aware i can do it incrementaly but that is not allowed in this case. The formula for result also does not work and I am just stuck. Any help appreciated.
  10. i swear i can code...............
  11. I am programming in c and it keeps throwing exceptions. Trying to read in 4 floating point numbers then multiply them in the formula "result = ax^2+bx+c", i don't understand why my code aint working..... i keep getting the exception Error LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) Formula C:\Users\james\OneDrive\Documents\Year 4\Object Programing\Formula\Formula\MSVCRTD.lib(exe_main.obj) 1 #include <stdio.h> int function() { double x, a, b, c, result; printf("Enter value for X:"); scanf_s("%lf", &x); printf("Enter value for A:"); scanf_s("%lf", &a); printf("Enter value for B:"); scanf_s("%lf", &b); printf("Enter value for C:"); scanf_s("%lf", &c); result = (a * pow(x,2)) + b * x + c; printf("result is = %lf", result); return(result); }
  12. Hey guys just looking for feedback on my commenting. Its for a school project so just wondering if any more comments are needed or if you'd do anything different. namespace Dataset.App.Wpf { public class MainWindowViewModel : ViewModelBase { private Timer _currentTime; // Timer object to trigger every second private int _labelCount; // Count to cycling the label display public MainWindowViewModel() { StartCurrentTime(); // start timer //populate offset list for user selection var units = new List<OffsetUnit>(); foreach (OffsetUnit item in Enum.GetValues(typeof(OffsetUnit))) { units.Add(item); } OffsetUnits = units.ToList(); SelectedOffsetUnit = OffsetUnit.Hour; // Select default offset unit as Hour } /// <summary> /// Trigger when browse button is clicked /// </summary> private RelayCommand _BrowseCommand; public ICommand BrowseCommand { get { if (_BrowseCommand == null) _BrowseCommand = new RelayCommand(() => OnBrowse()); return _BrowseCommand; } } /// <summary> /// Pop open dialog windows and allow user to select dataset file /// </summary> private void OnBrowse() { try { var openFileDialog = new System.Windows.Forms.OpenFileDialog(); openFileDialog.Title = "Input file"; openFileDialog.Multiselect = false; var result = openFileDialog.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) // If user click okay on open dialog { using (var mystream = openFileDialog.OpenFile()) // try read if file is currently in use, will throw error if file is currently in use { if (mystream != null) FileDirectory = openFileDialog.FileName; // Set file directory to FileDirectory for display on UI } if (string.IsNullOrEmpty(FileDirectory)) // if FileDirectory is empty or null, return return; Datasets = FileFormatHelper.Parse(FileDirectory).ToObservableCollection(); //Parse directory file and assign to dataset if (Datasets.Count == 0) // if dataset parsed with zero count, throw error as file might be invalid format { throw new Exception("There is problem with parsing input file"); } foreach (var item in Datasets) //If dataset is valid, set offset unit to each set by user selected offset value { item.PopulateDates(SelectedOffsetUnit); } SelectedDataset = Datasets.FirstOrDefault(); //Select first set as default OnPlot();//trigger plot update } } catch (Exception e) // if any error above show message box { MessageBox.Show(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } /// <summary> /// Will trigger when validate button is clicked /// </summary> private RelayCommand _ValidateCommand; public ICommand ValidateCommand { get { if (_ValidateCommand == null) _ValidateCommand = new RelayCommand(() => OnValidate()); return _ValidateCommand; } } private void OnValidate() { var validatingResult = FileFormatHelper.Validate(FileDirectory); //Parse directory file and perform validation if (validatingResult.Item1) // show messagebox base on validation result { MessageBox.Show("Validation success. No missing datasets", "Success", MessageBoxButton.OK, MessageBoxImage.Information); } else { MessageBox.Show("Validation Fail. " + validatingResult.Item2, "Failed", MessageBoxButton.OK, MessageBoxImage.Error); } } /// <summary> /// trigger when generate plot is clicked /// </summary> private RelayCommand _PlotCommand; public ICommand PlotCommand { get { if (_PlotCommand == null) _PlotCommand = new RelayCommand(() => OnPlot()); return _PlotCommand; } } private void OnPlot() //Plot selected dataset { PopulatePlot(SelectedDataset); } /// <summary> /// Trigger when export button is clicked /// </summary> private RelayCommand _ExportCommand; public ICommand ExportCommand { get { if (_ExportCommand == null) _ExportCommand = new RelayCommand(() => OnExport()); return _ExportCommand; } } /// <summary> /// popup savefiledialog and prompt user with export file option /// </summary> private void OnExport() { var dlg = new System.Windows.Forms.SaveFileDialog(); dlg.Title = "Export Dataset"; dlg.DefaultExt = ".txt"; dlg.Filter = "Text (*.txt)|*.txt|All files (*.*)|*.*"; //filter files by extension dlg.FileName = "Dataset"; var result = dlg.ShowDialog(); //Show dialog if (result == System.Windows.Forms.DialogResult.OK) { if (string.IsNullOrEmpty(dlg.FileName)) return; var exportText = FileFormatHelper.Export(this.Datasets.ToList()); //get export string from file format helper File.WriteAllText(dlg.FileName, exportText); //Write file Process.Start(dlg.FileName); //Open file } } /// <summary> /// trigger when exit is clicked /// </summary> private RelayCommand _ExitCommand; public ICommand ExitCommand { get { if (_ExitCommand == null) _ExitCommand = new RelayCommand(() => OnExit()); return _ExitCommand; } } private void OnExit() { System.Windows.Application.Current.Shutdown(); } /// <summary> /// Initiate timer object and refresh every 1000 millisecond /// </summary> private void StartCurrentTime() { _currentTime = new Timer(); _currentTime.Interval = 1000; // Hook up the Elapsed event for the timer. _currentTime.Elapsed += OnCurrentTimeEvent; // Have the timer fire repeated events (true is the default) _currentTime.AutoReset = true; // Start the timer _currentTime.Enabled = true; _currentTime.Start(); } /// <summary> /// Elapsed event to trigger update of current time. If dataset is loaded also update cycling of the label /// </summary> /// <param name="source"></param> /// <param name="e"></param> private void OnCurrentTimeEvent(Object source, System.Timers.ElapsedEventArgs e) { Application.Current.Dispatcher.Invoke(() => { CurrentTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"); if (Datasets != null && Datasets.Count > 0) { var currentIndex = _labelCount % Datasets.Count; var dataset = Datasets[currentIndex]; DatasetTimerInfo = string.Format("Dataset: {0}, Creation Time: {1}", dataset.Title, dataset.RecordingDateTime.ToString("dd/MM/yyyy HH:mm:ss")); _labelCount++; } }); } /// <summary> /// Populating dataset plot /// </summary> /// <param name="setName">Name of dataset to plot, if missing method is return with no action</param> public void PopulatePlot(string setName) { var ds = Datasets.FirstOrDefault(x => x.Title == setName); if (ds != null) PopulatePlot(ds); } /// <summary> /// Populating dataset plot /// </summary> /// <param name="ds">dataset to plot</param> public void PopulatePlot(DatasetObject ds) { if (ds == null) return; Model = ds.GetPlotModel(SelectedPlotOption); } /// <summary> /// List of offset unit for user selection /// </summary> private List<OffsetUnit> _OffsetUnits; public List<OffsetUnit> OffsetUnits { get { return _OffsetUnits; } set { if (value == _OffsetUnits) return; _OffsetUnits = value; RaisePropertyChanged("OffsetUnits"); } } /// <summary> /// Current selection of offset unit /// </summary> private OffsetUnit _SelectedOffsetUnit; public OffsetUnit SelectedOffsetUnit { get { return _SelectedOffsetUnit; } set { if (value == _SelectedOffsetUnit) return; _SelectedOffsetUnit = value; if (Datasets != null) foreach (var item in Datasets) { item.PopulateDates(SelectedOffsetUnit); } OnPlot(); RaisePropertyChanged("SelectedOffsetUnit"); } } /// <summary> /// Current user selected plot type /// </summary> private PlotOption _SelectedPlotOption; public PlotOption SelectedPlotOption { get { return _SelectedPlotOption; } set { if (value == _SelectedPlotOption) return; _SelectedPlotOption = value; OnPlot(); RaisePropertyChanged("SelectedPlotOption"); } } /// <summary> /// Time label display on UI /// </summary> private string _CurrentTime; public string CurrentTime { get { return _CurrentTime; } set { if (value == _CurrentTime) return; _CurrentTime = value; RaisePropertyChanged("CurrentTime"); } } /// <summary> /// Plot Model to be binded with oxyplot graph /// </summary> private PlotModel _Model; public PlotModel Model { get { return _Model; } set { if (value == _Model) return; _Model = value; RaisePropertyChanged("Model"); } } /// <summary> /// Label of cycling dataset display on UI /// </summary> private string _DatasetTimerInfo; public string DatasetTimerInfo { get { return _DatasetTimerInfo; } set { if (value == _DatasetTimerInfo) return; _DatasetTimerInfo = value; RaisePropertyChanged("DatasetTimerInfo"); } } /// <summary> /// Current selection of dataset /// </summary> private DatasetObject _SelectedDataset; public DatasetObject SelectedDataset { get { return _SelectedDataset; } set { if (value == _SelectedDataset) return; _SelectedDataset = value; RaisePropertyChanged("SelectedDataset"); } } /// <summary> /// List of current imported datasets /// </summary> private ObservableCollection<DatasetObject> _Datasets; public ObservableCollection<DatasetObject> Datasets { get { return _Datasets; } set { if (value == _Datasets) return; _Datasets = value; RaisePropertyChanged("Datasets"); } } /// <summary> /// Current selected importfile directory /// </summary> private string _FileDirectory; public string FileDirectory { get { return _FileDirectory; } set { if (value == _FileDirectory) return; _FileDirectory = value; RaisePropertyChanged("FileDirectory"); } } } public class DatasetObject : ObservableObject { /// <summary> /// if filtering is enabled /// </summary> private bool _IsFiltering; public bool IsFiltering { get { return _IsFiltering; } set { if (value == _IsFiltering) return; _IsFiltering = value; RaisePropertyChanged("IsFiltering"); } } //These properties assist with filtering if filtering is perform by value instead of date /// <summary> /// Is filter by value lowerbound /// </summary> private bool _IsLowerBound; public bool IsLowerBound { get { return _IsLowerBound; } set { if (value == _IsLowerBound) return; _IsLowerBound = value; RaisePropertyChanged("IsLowerBound"); } } /// <summary> /// Is filter by value upperbound /// </summary> private bool _IsUpperBound; public bool IsUpperBound { get { return _IsUpperBound; } set { if (value == _IsUpperBound) return; _IsUpperBound = value; RaisePropertyChanged("IsUpperBound"); } } /// <summary> /// value of lower bound /// </summary> private double _LowerBoundValue; public double LowerBoundValue { get { return _LowerBoundValue; } set { if (value == _LowerBoundValue) return; _LowerBoundValue = value; RaisePropertyChanged("LowerBoundValue"); } } /// <summary> /// value of upper bound /// </summary> private double _UpperBoundValue; public double UpperBoundValue { get { return _UpperBoundValue; } set { if (value == _UpperBoundValue) return; _UpperBoundValue = value; RaisePropertyChanged("UpperBoundValue"); } } /// <summary> /// current selection of filtering date /// </summary> private DateTime _SelectedFilteredDate; public DateTime SelectedFilteredDate { get { return _SelectedFilteredDate; } set { if (value == _SelectedFilteredDate) return; _SelectedFilteredDate = value; RaisePropertyChanged("SelectedFilteredDate"); } } /// <summary> /// list of dates for user to choose filtering date /// </summary> private List<DateTime> _Dates; public List<DateTime> Dates { get { return _Dates; } set { if (value == _Dates) return; _Dates = value; RaisePropertyChanged("Dates"); } } /// <summary> /// Name of the dataset /// </summary> private string _Title; public string Title { get { return _Title; } set { if (value == _Title) return; _Title = value; RaisePropertyChanged("Title"); } } /// <summary> /// Initial recoring time /// </summary> private DateTime _RecordingDateTime; public DateTime RecordingDateTime { get { return _RecordingDateTime; } set { if (value == _RecordingDateTime) return; _RecordingDateTime = value; RaisePropertyChanged("RecordingDateTime"); } } /// <summary> /// offset value /// </summary> private double _SampleOffset; public double SampleOffset { get { return _SampleOffset; } set { if (value == _SampleOffset) return; _SampleOffset = value; RaisePropertyChanged("SampleOffset"); } } /// <summary> /// data of the set /// </summary> private List<double> _Datas; public List<double> Datas { get { return _Datas; } set { if (value == _Datas) return; _Datas = value; RaisePropertyChanged("Datas"); } } /// <summary> /// Get PlotModel to be bind to oxyplot /// </summary> /// <param name="pltOption"></param> /// <returns></returns> public PlotModel GetPlotModel(PlotOption pltOption)//, bool resetOffset { //get boundary filter by value var bound = GetBoundFilter(); if (!double.IsNaN(bound.Item2) && bound.Item1 > bound.Item2) // check if user input boundary is valid { MessageBox.Show("Lower bound cannot be greater than upper bound", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return null; } var datasTuples = ProcessLowerUpperBoundSeries(bound); //Process filter by value, not active by default datasTuples = ProcessPlotOptionSeries(datasTuples, pltOption); // Process series base on user plot type selection var tmpModel = new PlotModel { Title = Title, LegendPlacement = LegendPlacement.Outside }; //set title for plot and placement of legend var series = new LineSeries { Title = Title, MarkerType = MarkerType.Circle }; // set title for series and marker type var dateTimeAxis = new DateTimeAxis(); // set xaxis to date dateTimeAxis.Position = AxisPosition.Bottom; dateTimeAxis.Key = "dateTimeAxis"; tmpModel.Axes.Add(dateTimeAxis); // add axis object to plot for (int i = 0; i < datasTuples.Count; i++) { if (datasTuples.Item1 >= GetFilterDate()) //perform filter by date series.Points.Add(new DataPoint(DateTimeAxis.ToDouble(datasTuples.Item1), datasTuples.Item2)); //add plot point to graph } tmpModel.Series.Add(series); //add series to graph return tmpModel; } /// <summary> /// Get filtered serie /// </summary> /// <returns></returns> public List<Tuple<DateTime, double>> GetFilteredSeries() { var serie = ProcessLowerUpperBoundSeries(GetBoundFilter()); //Process filter by value, filter is not active by default return serie.Where(x=>x.Item1 >= GetFilterDate()).ToList(); // process filter by date } /// <summary> /// Perform filtering of data series with value boundary /// </summary> /// <param name="LowerUpperBound">boundary object Tuple<double,double></param> /// <returns></returns> private List<Tuple<DateTime, double>> ProcessLowerUpperBoundSeries(Tuple<double, double> LowerUpperBound) { var lowerbound = !double.IsNaN(LowerUpperBound.Item1) ? LowerUpperBound.Item1 : double.NegativeInfinity; // if lower bound not set to negative infinit var upperbound = !double.IsNaN(LowerUpperBound.Item2) ? LowerUpperBound.Item2 : double.PositiveInfinity; // if lower bound not set to positive infinit var datasTuples = new List<Tuple<DateTime, double>>(); for (int i = 0; i < Datas.Count; i++) { if (Datas >= lowerbound && Datas <= upperbound) // If data pass the bound add to list { var offsetTime = Dates; datasTuples.Add(new Tuple<DateTime, double>(offsetTime, Datas)); } } return datasTuples; // return filtered value } /// <summary> /// Processing series point based on user selection /// </summary> /// <param name="serie">Original serie</param> /// <param name="pltOption">Selected Option</param> /// <returns></returns> private List<Tuple<DateTime,double>> ProcessPlotOptionSeries(List<Tuple<DateTime,double>> serie,PlotOption pltOption) { switch (pltOption) { case PlotOption.Normal: return serie; case PlotOption.ThreePointsMovingAverage: return ThreePointMovingAverage.Process(serie); case PlotOption.WhiteNoise: return WhiteNoiseHelper.Process(serie); case PlotOption.Cumulative: return CumulativeHelper.Process(serie); default: return new List<Tuple<DateTime, double>>(); } } /// <summary> /// Calculating offset from recording date and offset index with unit of offset /// </summary> /// <param name="dt"></param> /// <param name="i"></param> /// <param name="unit"></param> /// <returns></returns> private DateTime CalculatingOffset(DateTime dt, int i, OffsetUnit unit) { switch (unit) { case OffsetUnit.Second: return dt.AddSeconds(SampleOffset * i); case OffsetUnit.Hour: return dt.AddHours(SampleOffset * i); case OffsetUnit.Day: return dt.AddDays(SampleOffset * i); case OffsetUnit.Month: return dt.AddMonths(Convert.ToInt32(SampleOffset) * i); default: return dt; } } /// <summary> /// repopulate list filter selection base on new offset unit select /// </summary> /// <param name="unit"></param> public void PopulateDates(OffsetUnit unit) { var result = new List<DateTime>(); for (int i = 0; i < Datas.Count; i++) { result.Add(CalculatingOffset(RecordingDateTime, i, unit)); } Dates = result.ToList(); SelectedFilteredDate = Dates.FirstOrDefault(); //select first of list as default } /// <summary> /// Get bound value if filter is perform by value, inactive by default /// </summary> /// <returns></returns> private Tuple<double, double> GetBoundFilter() { var lowerValue = double.NaN; var upperValue = double.NaN; if (IsFiltering) { if (IsLowerBound) lowerValue = LowerBoundValue; if (IsUpperBound) upperValue = UpperBoundValue; } return new Tuple<double, double>(lowerValue, upperValue); } /// <summary> /// Get filter date value, if not active date filter will return date minvalue /// </summary> /// <returns></returns> private DateTime GetFilterDate() { return IsFiltering ? SelectedFilteredDate : DateTime.MinValue; } } /// <summary> /// Enum for plot type selection /// </summary> public enum PlotOption { Normal, ThreePointsMovingAverage, WhiteNoise, Cumulative, } /// <summary> /// Offset unit for selection /// </summary> public enum OffsetUnit { Second, Hour, Day, Month, } }
  13. @kyleTay There is no issue with the wattage its purely build quality. I know how it feels it could kill hardware later on and cost you more in the long run is all.
  14. That should all check out. But if i was you id spend an extra bit of cash on a slightly better Power supply. Just for yourself. I have had bad experiences with cheap power supply's before. But other than that it all looks good.
×