วิธีแก้ไขข้อผิดพลาดในการรวบรวมที่กล่าวถึง“ stray '\ 342'” และ“ stray '\ 200'” [ปิด]


9

ฉันเขียนโปรแกรมนี้:

#include<stdio.h>
int main()
{
printf(“Hello World\n”);
return 0;
}

ฉันบันทึกเป็นfirst.cและพยายามรวบรวม แต่ได้รับปัญหานี้ฉันได้ติดตั้งแม้แต่คอมไพเลอร์ gcc ด้วย

$ gcc first.c -o first1
first.c: In function ‘main’:
first.c:4:1: error: stray ‘\342’ in program
first.c:4:1: error: stray ‘\200’ in program
first.c:4:1: error: stray ‘\234’ in program
first.c:4:11: error: ‘Hello’ undeclared (first use in this function)
first.c:4:11: note: each undeclared identifier is reported only once for each function 
it appears in
first.c:4:17: error: expected ‘)’ before ‘World’
first.c:4:17: error: stray ‘\’ in program
first.c:4:17: error: stray ‘\342’ in program
first.c:4:17: error: stray ‘\200’ in program
first.c:4:17: error: stray ‘\235’ in program

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


คุณคัดลอกโปรแกรมนี้จากโปรแกรมประมวลผลคำหรือเอกสารอื่นเช่น Libre office หรือ Microsoft Word หรือไม่
jobin

หากคุณคัดลอกรหัสจากที่อื่นให้เขียนรหัสใหม่ด้วยตัวคุณเองเนื่องจากรหัสที่คุณคัดลอกอาจมีรหัสที่ไม่ต้องการฝังอยู่

คำตอบ:


13

ปัญหาคือคุณมีเครื่องหมายอัญประกาศ Unicode แทนอัญประกาศ ASCII; อาจเป็นบรรณาธิการของคุณเปลี่ยนพวกเขาโดยอัตโนมัติหรือคุณคัดลอกข้อความจากเว็บไซต์ที่ทำสิ่งนี้โดยอัตโนมัติในซอฟต์แวร์การเขียนของมัน แทนที่เครื่องหมายคำพูดด้วยอัญประกาศ ASCII ปกติ (0x22, ") และควรทำงานได้

แหล่งที่มาคงที่:

#include <stdio.h>
int main()
{
    printf("Hello World\n");
    return 0;
}

+1 ฉันสงสัยว่าเขาได้รับการเสนอราคาย้อนกลับ / ไปข้างหน้าเหล่านั้นได้อย่างไร
แอรอน

เครื่องหมายอัญประกาศ Unicode vs. ASCII อาจไม่ใช่วิธีที่ดีที่สุดในการระบุความแตกต่างเนื่องจากเครื่องหมายอัญประกาศที่ถูกต้องสำหรับสตริงใน C ( ") เป็นอักขระ Unicode เช่นกัน (พวกเขายังเกิดขึ้นจะเป็นอักขระ ASCII แต่ทุกเวลามีคนคือการเลือกระหว่างสองไฟล์ของพวกเขาอาจจะถูกบันทึกไว้ในบางรูปแบบ Unicode บนยูนิกซ์เช่นระบบมักจะ UTF-8..)
Eliah Kagan

ตัวอักษรส่อเสียดอื่น ๆ ที่มีแทน -
Trevor Boyd Smith

2

คุณใส่สตริงของคุณในเครื่องหมายคำพูดผิด

คุณมี:

Hello World\n

คุณควรจะมี:

"Hello World\n"

ในขณะที่คำพูดที่คุณใช้ดูคล้ายกันพวกเขาจะไม่ได้รับการยอมรับจากคอมไพเลอร์ C ว่าล้อมรอบสตริง ดังนั้นคุณจะได้รับข้อความแสดงข้อผิดพลาดเกี่ยวกับอักขระ Unicode ที่ไม่รู้จักและคุณจะได้รับข้อความแสดงข้อผิดพลาดที่แสดงว่าเนื้อหาของสตริงนั้นกำลังถูกตีความว่าเป็นรหัสโปรแกรมที่ไม่มีเครื่องหมาย

คุณจะทราบว่าเครื่องหมายคำพูดที่คุณใช้มีอักขระแยกต่างหากสำหรับการเริ่มต้นและสิ้นสุดการเสนอราคา (พวกเขาโค้งในลักษณะที่คำพูดมักจะเรียงพิมพ์) โปรแกรมประมวลผลคำจำนวนมาก - ตามที่Jobin แนะนำ -จะเปลี่ยน"ราคาง่าย ๆให้เป็นเครื่องหมายคำพูดแฟนซี หากคุณใช้โปรแกรมประมวลผลคำเพื่อเขียนโปรแกรม C คุณควรใช้โปรแกรมแก้ไขข้อความแทน

Ubuntu มาพร้อมกับการgeditติดตั้งตามค่าเริ่มต้น (แม้ว่าจะมีโปรแกรมแก้ไขข้อความอื่น ๆ ให้เลือกเช่นกัน) เช่นเดียวกับการแก้ไขข้อความจำนวนมากgeditให้เน้นไวยากรณ์สำหรับการเขียนโปรแกรมหลายภาษารวมทั้งภาษา C (ข้อความแตกต่างกันดังนั้นในโปรแกรมของคุณจะแสดงในสีที่แตกต่างที่มีความหมายความหมายของมัน) ซึ่งเป็นคุณสมบัติที่มีประโยชน์และทำให้แก้ไขข้อความมากสะดวกสบายและใช้งานง่ายสำหรับ การเขียนโปรแกรมกว่าโปรแกรมประมวลผลคำ

นี่อาจเป็นอูบุนตูโดยเฉพาะถ้าคุณคุ้นเคยกับโปรแกรมแก้ไขข้อความบนแพลตฟอร์มอื่นที่ลดเครื่องหมายคำพูดที่วางลงโดยอัตโนมัติให้เป็นเวอร์ชันที่ไม่แฟนซี แต่คำถามนี้อาจสิ้นสุดการปิดและย้ายไปยังกองมากเกิน


ปัญหาแก้ไขได้โปรแกรมคือ compiled.tanx มาก
Zahid

1

คุณสามารถใช้sedคำสั่งเพื่อแก้ไขปัญหาเหล่านี้

นี่จะให้ภาพตัวอย่างอย่างรวดเร็วของสิ่งที่จะถูกแทนที่

sed -re 's/”|“/"/g' File.txt

วิธีนี้จะทำการแทนที่และใส่การแทนที่ในไฟล์ใหม่ที่เรียกว่าWithoutSmartQuotes.txt:

sed -re 's/”|“/"/g' File.txt > WithoutSmartQuotes.txt

สิ่งนี้จะเขียนทับไฟล์ต้นฉบับ:

sed -i .bk -re 's/”|“/"/g' File.txt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.