为什么println打印会有额外字母

我最近用println在终端输出的时候,总是有些额外的字母。

println("正在计算Method1")
wakevol1 = getWakeVoltage(zvec, ρvec, wake, Δz, Nb)
println("正在计算Method2")
wakevol2 = getWakeVoltage(zvec, ρvec, ωvec, reZvec, imZvec, Δω, Δz, Nb)

结果:

o正在计算Method1n
da正在计算Method2 
a

请尽量贴出可以让大家执行的完整精简代码。你此处的getWakeVoltage函数的定义以及输入变量均未给出,我们无法判断问题出处。

你好,我是想测试下面两个方法的相似程度:

"""
根据尾场函数,计算Wake Voltage.
"""
function getWakeVoltage(zvec::Vector{Float64}, ρvec::Vector{Float64}, funz2wakez::Union{Interpolations.Extrapolation,Function}, Δz, Nb, elementcharge=1.6021766208e-19)
	volvec = zeros(size(zvec, 1))
	@sync for i in 1:length(zvec)
		Threads.@spawn begin
			s = 0.0
			@fastmath for j in 1:length(zvec)
				s += funz2wakez((i-j)*Δz) * ρvec[j] * Δz
			end
			volvec[i] = s
		end
	end
	-Nb*elementcharge*volvec
end

"""
根据只有正半频域的阻抗,计算Wake Voltage.
"""
function getWakeVoltage(zvec::Vector{Float64}, ρvec::Vector{Float64}, ωvec::Vector{Float64}, reimpedancevec::Vector{Float64}, imimpedancevec::Vector{Float64}, Δω, Δz, Nb, elementcharge=1.6021766208e-19, clight=299792458.0)
	volvec = zeros(size(zvec, 1))
	@sync for i in 1:(length(zvec)-1)
		Threads.@spawn begin
			s = 0.0
			@fastmath @inbounds for ωindex in 1:length(reimpedancevec)
				ω = ωvec[ωindex]
				tmp1 = 0.0
				tmp2 = 0.0
				@fastmath @inbounds for j in (i+1):length(zvec)
					ϕ = ω*(i-j)*Δz/clight
					tmp1 += ρvec[j]*cos(ϕ)
					tmp2 += ρvec[j]*sin(ϕ)
				end
				s += reimpedancevec[ωindex]*tmp1 - imimpedancevec[ωindex]*tmp2
			end
			volvec[i] = s
		end
	end
	-Nb*elementcharge*Δω*Δz/π/2 .* volvec	# Why /2? Because 我们拿到的正半频域的阻抗,通常是将负半频域的幅值折叠过去的。
end

我调用这两个方法的完整代码:

computername = ENV["COMPUTERNAME"]
if computername == "家里电脑"
    push!(LOAD_PATH, "E:/Documents/JuliaProgram/MyModules/")
elseif computername == "宿舍电脑"
    push!(LOAD_PATH, "F:/Documents/JuliaProgramme/MyModules")
elseif computername=="DESKTOP-FDIN0I7"
    push!(LOAD_PATH, "D:/Documents/Julia/MyModules")
elseif computername=="TINA"
    push!(LOAD_PATH, "D:/JuliaProgramme/MyModules")
end

using DoubleRFs, CSV, DataFrames, Interpolations, BenchmarkTools, Plots

function wake(z::Float64)::Float64
    if z > 0.0
        return 0.0
    elseif z==0.0
        return α*Rs
    else
        return 2α*Rs*exp(α*z/clight)*(cos(ωbar*z/clight)+α/ωbar*sin(ωbar*z/clight))
    end
end

function gaussianρ(z, σz)
    1/sqrt(2*π)/σz*exp.(-0.5 .* (z./σz).^2)
end

function reimpedance(ω)
    res = 1+Q^2*(ωR/ω-ω/ωR)^2
    2*Rs/res
end

function imimpedance(ω)
    -2.0*Rs*Q*(ωR/ω-ω/ωR)/(1+Q^2*(ωR/ω-ω/ωR)^2)
end

const σz = 0.00252
const Nb = 5e-9/1.6e-19
const Δz = 0.01σz
const Rs = 891898
const ωR = 2π*56e9
const Q = 10
const α = ωR/2Q
const ωbar = sqrt(ωR^2 - α^2)
const clight = 3e8
const Δω = 1e10
ωvec = collect(Δω:Δω:5e12)
zvec = collect(-0.2:Δz:0.2)
ρvec = gaussianρ(zvec, σz)
reZvec = reimpedance.(ωvec)
imZvec = imimpedance.(ωvec)

println("正在计算Method1")
wakevol1 = getWakeVoltage(zvec, ρvec, wake, Δz, Nb)
println("正在计算Method2")
wakevol2 = getWakeVoltage(zvec, ρvec, ωvec, reZvec, imZvec, Δω, Δz, Nb)

gr()
plt = plot(zvec, wakevol1, label="Method1")
plot!(plt, zvec, wakevol2, label="Method2")
display(plt)

几点尝试建议:

  1. 逐行运行代码,看是否正常打印
  2. 执行多行,在 println 后边加 flush(stdout)
  3. 多出的字符 odnaa 不在 println 里,排除键盘误触,看能不能再复现,以及看这些字符是执行哪段代码出来的

回复点错了,不好意思 :joy: