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.exeWpisz dlugosc boku:
 3
 ***
 * *
 ***
c:\> kwadrat.exeWpisz 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 » |