sscanf, błąd programu przy braku argumentu
Ostatnio zmodyfikowano 2014-05-25 10:22
Sarus Temat założony przez niniejszego użytkownika |
sscanf, błąd programu przy braku argumentu » 2014-05-25 00:47:58 Witam. Jako pracę domową muszę napisać program który rysuje kwadrat o boku podanym przez użytkownika albo za pomocą argumentu albo wpisując bezpośrednio w programie (gdy argument nie został podany). Tutaj pojawia się mój problem, w poniższym kodzie gdy nie wpiszę argumentu pojawia się informacja "Program przestał działać" z opcją zamknij, jeżeli argument zostanie podany wszystko jest w porządku. musi wyglądać w ten sposób. c:\> kwadrat.exe Wpisz dlugosc boku: 3 *** * * *** c:\> kwadrat.exe Wpisz dlugosc boku: - 2 Zla dlugosc boku c:\> kwadrat.exe 4 **** * * * * **** Z góry dziękuję za pomoc. Mój kod. #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int main( int argc, char * argv[] ) { int dlugosc, bokpoziom, bokpion; char * sprawdz = argv[ 1 ]; if( sscanf( sprawdz, "%d", & dlugosc ) == 0 ) { cout << "Wpisz dlugosc boku: "; cin >> dlugosc; } if( dlugosc > 0 ) { for( bokpion = 0; bokpion < dlugosc; bokpion++ ) { if( bokpion == 0 || bokpion == dlugosc - 1 ) { for( bokpoziom = 0; bokpoziom < dlugosc; bokpoziom++ ) { cout << "*"; } cout << endl; } else { cout << "*"; for( bokpoziom = dlugosc - 2; bokpoziom > 0; bokpoziom-- ) { cout << " "; } cout << "*" << endl; } } return EXIT_SUCCESS; } else { cout << "Zla dlugosc boku" << endl; return EXIT_FAILURE; } }
Building to ensure sources are up-to-date Selecting target: Debug Adding source dir: D:\Projekty c++\Praca domowa 2\CW1\ Adding source dir: D:\Projekty c++\Praca domowa 2\CW1\ Adding file: D:\Projekty c++\Praca domowa 2\CW1\bin\Debug\CW1.exe Changing directory to: D:/PROJEK~1/PRACAD~2/CW1/. Set variable: PATH=.;C:\Program Files (x86)\CodeBlocks\MinGW\bin;C:\Program Files (x86)\CodeBlocks\MinGW;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Intel\WiFi\bin;C:\Program Files\Common Files\Intel\WirelessCommon Starting debugger: C:\Program Files (x86)\CodeBlocks\MINGW\bin\gdb.exe -nx -fullname -quiet -args D:/PROJEK~1/PRACAD~2/CW1/bin/Debug/CW1.exe done Registered new type: wxString Registered new type: STL String Registered new type: STL Vector Setting breakpoints Debugger name and version: GNU gdb (GDB) 7.5 Child process PID: 3684 Program received signal SIGSEGV, Segmentation fault. In sscanf () (C:\Windows\syswow64\msvcrt.dll) #2 0x004013a2 in main (argc=1, argv=0x950f98) at D:\Projekty c++\Praca domowa 2\CW1\CW1.cpp:8 D:\Projekty c++\Praca domowa 2\CW1\CW1.cpp:8:174:beg:0x4013a2 At D:\Projekty c++\Praca domowa 2\CW1\CW1.cpp:8 #2 0x004013a2 in main (argc=1, argv=0x950f98) at D:\Projekty c++\Praca domowa 2\CW1\CW1.cpp:8 D:\Projekty c++\Praca domowa 2\CW1\CW1.cpp:8:174:beg:0x4013a2
|
|
MrPoxipol |
» 2014-05-25 10:22:17 if( argc < 2 ) { cin >> ile; } else { sscanf( argv[ 1 ], "%d", ile ); }
|
|
« 1 » |