ใครเห็น error ในโค้ด ช่วยชี้เป้าให้ที

  • 8 Replies
  • 2715 Views
Code: [Select]
#include <stdio.h>
int main()
{
    char text[100];
    char space[100];
    int c = 0;
    int d = 0;
 
   printf("Enter some text: \n");
   gets(text);

   while (text[c] != '\0')
   {
       if (!(text[c] == ' ' && text[c+1] == ' '))
       {
            space[d] = text[c];
            d++;
       }
       c++;
    }
    printf("Text after removing blanks:\n%s\n", space);
    return 0;
}

รับทำ PCB ออกแบบและพัฒนา วงจรอิเล็กทรอนิกส์ ไมโครคอนโทรลเลอร์ ระบบ Internet of Things (IoT)
ติดต่อได้ที่ https://www.facebook.com/micro4you หรือแอด Line ID: https://line.me/R/ti/p/%40micro4you

หรือดูรายละเอียดที่ https://www.electoday.com/index.php/topic,17.0.html

น่าจะใส่ '\0' ปิดท้ายที่ array ของ space ด้วยครับ เพราะ space อยู่ใน local แบบนี้อาจเป็นข้อมูลที่เป็นขยะ มีข้อมูลที่ไม่แน่นอน และเมื่อจะใช้เป็น string ก็จะต้องใส่ '\0' ปิดท้ายให้ด้วยเสมอ
ดังนั้นน่าจะเพิ่มเป็น

Code: [Select]
...
space[d] = 0;
printf("Text after removing blanks:\n%s\n", space);
...

และ text[100] , space[100] เป็นการจองเผื่อไว้ อาจไม่พอก็ได้ครับ ให้ระวังไว้

ไม่รู้ว่า ถูกเป้าไหมครับ ....!

ขอเล่นด้วยคน

ค่า c ไม่ได้พวกเพิ่มฮับ...  ;)

ใช่ป่าวเอ่ย... ::)

======= update ==============

อ่าว......เวรละ.......พึ่งเจอ... c++ ในบรรทัดข้างล่าง... งั้นขอแก้ตัวสักครู่ครับ  :o

======= update ==============

ทำไม ตรง condition จึงเป็น

if (!(text[c] == ' ' && text[c+1] == ' '))

แทนที่จะเป็น

if (text[c] != ' ')

จินตภาพล้วนๆ ยังไม่ลองกับ compiler นะท่าน  :o

*

Offline nont_peet

  • **
  • 52
  • คนรักหุ่นยนต์
    • View Profile
เล่นด้วยครับ   

 :o :o :o   ถ้ารัน turbo 3.0 เราจะไม่เห็น เพราะไม่ได้ใส่ getch();  555   :o :o :o
คนรักหุ่นยนต์

*

Offline gui

  • ***
  • 111
    • View Profile
โปรแกรมไม่แสดงผลอะไรเพราะว่าตัวแปร space[d] มีค่าเป็นช่องว่างตลอด
 space[d] = text[c];
คราวนี้ text[c] = ' ' ;

โปรแกรมไม่แสดงผลอะไรเพราะว่าตัวแปร space[d] มีค่าเป็นช่องว่างตลอด
 space[d] = text[c];
คราวนี้ text[c] = ' ' ;


 text[c] = ' '

มันอยู่ตรงไหนท่าน... ผมหาไม่เจอ  :o

*

Offline gui

  • ***
  • 111
    • View Profile
ขออภัยครับ ดูไม่ดีเอง
if (!(text[c] == ' ' && text[c+1] == ' '))
เงื่อนไขมี ! นำหน้าทำให้เงื่อนไขนี้กลายเป็น NOT Gate

โปรแกรมทำงานได้ แต่โปรแกรมนี้จะตัดช่องว่างออกเฉพาะกรณีที่เจอ ช่องว่างติดกัน 2 ตัวขึ้นไปมันตัดเหลือช่องว่างตัวเดียว ถ้าเจอช่องว่างตัวเดียวไม่ตัดครับ
ปัญหาที่เจอแบบที่ท่าน wozniak ว่าไว้ ก็คือ ลืมใส่ '\0' ที่ท้ายข้อความ เพื่อบอกว่าจบข้อความ

เฉลย  =   Line#22: need to terminate space string, add: space[d]=’\0′;

รับทำ PCB ออกแบบและพัฒนา วงจรอิเล็กทรอนิกส์ ไมโครคอนโทรลเลอร์ ระบบ Internet of Things (IoT)
ติดต่อได้ที่ https://www.facebook.com/micro4you หรือแอด Line ID: https://line.me/R/ti/p/%40micro4you

หรือดูรายละเอียดที่ https://www.electoday.com/index.php/topic,17.0.html